ID에서 사용자 이름을 가져 오는 함수를 아래에 작성했습니다. 잘 작동하지 않습니다. console.log (result.first_name);을 작성할 수 있습니다. 쿼리 함수 내에서 사용자 이름이 내 터미널에는 표시되지만 브라우저에는 표시되지 않습니다. 함수 끝에 "return"something ";"을 추가하여 브라우저에 나타나는지 확인하려고 시도했습니다. 쿼리 결과가 반환되도록 함수를 작성하려면 어떻게해야합니까?함수에서 mongojs 쿼리 결과를 반환하십시오.
기능 (app.js에서 전역 함수) (app.js에서)
function usernameFromId(id, callback){
db.users.findOne({ _id: ObjectId(id.toString()) }, function(err, result) {
var first_name = result.first_name;
console.log(first_name); // names show up in the console…
callback(first_name);
});
};
페이지 처리기
app.get('/books', function(req, res){
function timeSince(dato){
moment.lang('nb');
return moment(dato).fromNow();
};
db.books.find().sort({ added:-1 }, function(err, docs) {
var books = docs;
db.activity.find().limit(9).sort({ time:-1 }, function(err, docs) {
var activity = docs;
res.render('books', {
books: books,
activity: activity,
timeSince: timeSince,
usernameFromId: usernameFromId
})
});
});
});
템플릿 (books.jade)
- each a in activity
p=usernameFromId(a.user_id, function(name){return name;})
클로저에서 응답을 래핑하여보다 테스트 가능하도록 만들 수 있습니다. 그런 다음 클로저를 쿼리의 콜백으로 전달하십시오. 따라서 HTTP가 필요없는 모의 (mock)이나 다른 것으로 대체 할 수 있습니다. 내 자신의 비슷한 질문에 내 대답을 참조하십시오 http://stackoverflow.com/questions/11972763/how-to-use-events-keep-mongodb-logic-out-of-node-js-request-handlers – fijiaaron
이것은 정말 해킹 된 솔루션입니다. 반복되는 중첩 된 mongojs 쿼리보다 직관적 인 방법이 있다고 생각합니다. –