나는 Node.js를 배우고 있으며 핵심 기능을 배우기위한 The Node Beginner Book과 같은 튜토리얼을 읽었습니다. 그러나 몇 가지 예를 읽을수록 컬렉션 수집에 대한 의구심이 커집니다. 튜토리얼로부터 얻어지는 또 다른 예에서 Express/Connect 미들웨어는 어떻게 작동합니까?
, 우리는 CRUD위한 것을 알 수 키/documents/titles.json
요청을 '판독'우리 값 반환된다 :이 예에서
app.get('/documents/titles.json', loadUser, function(req, res) {
Document.find({ user_id: req.currentUser.id },[], { sort: ['title', 'descending'] },
function(err, documents) {
res.send(documents.map(function(d) {
return { title: d.title, id: d._id };
}));
});
});
를 함수 loaduser()
은 인증 목적으로 사용 :
function loadUser(req, res, next) {
if (req.session.user_id) {
User.findById(req.session.user_id, function(err, user) {
if (user) {
req.currentUser = user;
next();
} else {
res.redirect('/sessions/new');
}
});
}
}
내가 이해하지 못하는 것은 :
- node.js가 app.get을 실행하기 전에 loaduser 함수로 이동한다고 가정합니다.
loadUser()
함수에는 세 개의 매개 변수가 있습니다. req, res, next,하지만 적어도,app.get()
에서 "req"매개 변수를loadUser()
으로 전달하는 방법을 볼 수 없습니다. 어디서 올까요? 당신이next()
을 실행할 때 - 내부
loadUser()
기능, 그것은 함수app.get()
은 "그 절차를 계속 할 수 있다는 것을 의미하지만,이 req.currentUser = 사용자가loadUser()
함수 내부app.get()
기능? - 에 사용되는 것과 동일한 REQ입니다, ? 당신이
res.redirect()
코드를 실행하면, 자동으로Document.find()
에 반환하지 않는 것처럼 바로 보이는,app.get()
기능의 절차를 나누기 당신이 질문 한 질문은 구체적으로 Express 프레임 워크 내부에 대한 있습니다
첫 번째 코드 샘플은 다음과 같습니다. 비동기 함수에서 값을 분명히 반환 할 수 없습니다. 비동기 코드가 작동하는 방식이 아닙니다. 반환 값이 없습니다. 당신이 할 수있는 일은 다른 기능을 호출하는 것입니다. – Tomalak