Express, Node.js 및 MongoDB (mongojs 사용)를 사용하는 애플리케이션을 작성하고 있습니다. 모듈 db.js
및 server.js
이 있으며 아래에 스 니펫이 있습니다.Express를 사용하여 MongoDB 쿼리 결과를 JSON으로 전송
db.js
var getUsersByCity = function(city, callback) {
db.users.find({'city': city}).toArray(function(err, data) {
if (err) {
callback(err);
console.log(err);
} else {
console.log(data);
callback.json(data);
}
});
}
server.js
app.post("/get_users_list", function(req, res) {
var body = req.body;
db.getUsersByCity(body.city, res);
});
그것의 작동 당신이 볼 수 있듯이, 때문에, 나는 callback.json(data)
을 때 내가해야 사용 (아마 잘못) 해요 callback(data)
을 사용하고 있습니다. db.js
모듈이 응답을 보내지 않아야하며 내 함수의 콜백으로 res.json
을 전달해야한다고 생각합니다.
문제는 : 나는 것들을 내가 바로 생각하는 방법을 수행 할 때, 나는 다음과 같은 오류에 직면
path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/connection/base.js:245
throw message;
^
TypeError: Cannot call method 'get' of undefined
at res.json (path_to_my_app/node_modules/express/lib/response.js:189:22)
at path_to_my_app/db.js:36:13
at path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/cursor.js:163:16
at commandHandler (path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/cursor.js:706:16)
at path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/db.js:1843:9
at Server.Base._callHandler (path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/connection/base.js:445:41)
at path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/connection/server.js:468:18
at MongoReply.parseBody (path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
at null.<anonymous> (path_to_my_app/node_modules/mongojs/node_modules/mongodb/lib/mongodb/connection/server.js:426:20)
at EventEmitter.emit (events.js:95:17)
어떻게 제대로 내 DB 모듈에 응답 객체를 전송하지 않고 JSON 응답을 보낼 수 있습니까?
P. 라인 36의 내용이 db.js
일 때 변경하면 callback(data);
이됩니다.