Я использую узел js $ http для обработки запроса HTTP post, который аутентифицирует пользователя по почте и паролю с помощью DB (mongoDB).HTTP post req не синхронизируется с DB req
Проблема в том, что запрос БД требует времени и, следовательно, не синхронизируется с http-вызовом. Я возвращаюсь обратно http с req == undefiend, потому что я не жду (с обещанием или что-то в этом роде, до завершения db-запроса).
Поскольку я новичок в JS и узле JS, я буду признателен, если кто-то поможет мне исправить мой код. Благодаря!
Важно: он будет работать, если я пошлю req с истинным или ложным значением прямо из внутренней функции -> Я знаю это! но .. Я хочу, чтобы это было написано более общим образом - я хочу, чтобы логика http не была связана с логикой db.
app.post('/authenticate_user', function(req, res){
var mail = req.body.Mail;
var password = req.body.Password;
res.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate, max-age=0");
var isValid=authenticate_user(mail, password);
console.log("isValid-->"+isValid);
// I get undefiend since at this time the db did nor finish...
res.json(isValid);
});
var authenticate_user=function(mail, password){
var query = user_details.find({'Mail': mail});
query.exec(function(err, docs){
if (docs.length==0) {
return false;
}
else{
return(docs[0].Password==password);
}
});
}
это обратный вызов способ работы такой же, как с помощью обещание когда -> затем метод? – Matoy