usersCollection.findOne
가 비동기이고 그것의 콜백이 호출 된 같은 res.send();
후라고합니다 내가 서버에 호출을하고있는 곳에서
app.put('/users/signin',function(req,res,next){
db.collection('users',function(err,usersCollection){
usersCollection.findOne({username:req.body.username},function(err,user){
bcrypt.compare(req.body.password,user.password,function(err,result){
if(result){
var token = jwt.encode(user,JWT_SECRET);
return res.json({token:token});
}else{
res.status(400).send();
}
})
});
});
res.send();
});
컨트롤러를 .. 파일.
res.send();
을 bcrypt.compare
콜백으로 이동하십시오.
app.put('/users/signin', function(req, res, next) {
db.collection('users', function(err, usersCollection) {
usersCollection.findOne({ username: req.body.username }, function(err, user) {
bcrypt.compare(req.body.password, user.password, function(err, result) {
if (result) {
var token = jwt.encode(user, JWT_SECRET);
res.json({ token: token });
} else {
res.status(400);
}
// like here
res.send();
});
});
});
});
, 콜백는 다른 코드에 인수로 전달되는 실행 코드의 조각이다. 정의에 의해 콜백을 사용하면 비동기적인 것은 없지만 비동기 프로그래밍과 함께 사용하는 것은 정말 유용한 개념입니다.
JavaScript에서는 함수가 함수 참조를 콜백 역할을하는 인수로 취할 수 있습니다.
는
function someFunction(callback) {
console.log("before async callback");
setTimeout(callback, 1); // calls the callback asynchronously
console.log("after async callback");
}
는
그것은 함수 표현식을 사용하여 기존 기능
function myExistingFunction() {
console.log("inside a callback");
}
someFunction(myExistingFunction);
또는이 등을 사용하여, 다음과 같이 호출 할 수
someFunction(function(){
console.log("inside a callback");
});
someFunction
을 모두 호출하여에 다음을 인쇄 할 것이다 콘솔 그 순서대로 :
before async callback
after async callback
inside a callback
왜 순서가 좋습니까?
someFunction
이 비동기 함수 setTimeout
에 콜백을 전달하므로 콜백이 즉시 호출되지 않고 호출 스택이 완료된 후에 만 호출됩니다. 그래서 someFunction
은 완전히 끝났고, 언젠가는 콜백이 호출됩니다.
)은 (내가 res.send을 제거 ...
안녕하세요 .. 감사를 표현 그것의 작동하지만 지금은 내게 다른 오류 $ cookies.put을주는거야 ..... – ravi
@ ravi 그 또 다른 문제는, 그래서 다른 질문을 부탁드립니다. –
도움을 주셔서 감사합니다.이 문제를 해결했습니다. :) – ravi