バックエンドサービスにnodejs + Expressを使用しています。約束から返された値を正しく取得する方法は?
私はsequelizeで認証を支援するためにauthenHandler.jsファイルを持っている:
module.exports = {
isAuthenticated: function(data) {
models.Users.find(data)
.then(function(user) {
if (user) {
return true;
} else {
return false;
}
});
}
}
私はapp.jsで、このヘルパー関数を使用していた場合:
app.use(function(req, res, next) {
// process to retrieve data
var isAuthenticated = authProvider.isAuthenticated(data);
console.log(isAuthenticated);
if (isAuthenticated) {
console.log("auth passed.");
next();
} else {
var err = new Error(authenticationException);
err.status = 403;
next(err);
}
}
})
これは常にelseステートメントに行きますisAuthenticatedプリント行は常にundefinedを返すためです。 if-elseステートメントが呼び出された後に約束が返されたように見えます。
authenHandler.jsとapp.jsの接続方法が正確ではありません。それを行う最良の方法は何ですか?それは約束
isAuthenticated: function(data) {
return models.Users.find(data)
.then(function(user) {
if (user) {
return true;
} else {
return false;
}
});
}
を返した後、約束
authProvider.isAuthenticated(data)
.then((result =>{
var isAuthenticated = result;
console.log(isAuthenticated);
if (isAuthenticated) {
console.log("auth passed.");
next();
} else {
var err = new Error(authenticationException);
err.status = 403;
next(err);
}
}))
require( 'authenHandler.js')はまだ使用していますか? –
複製物の "Promise gotchas"を参照してください。 –
isAuthenticated関数は、isAuthenticated関数で同じパラメータreq、resおよびnextを保持することでミドルウェアとして使用でき、関数内で日付自体を取得するために処理できます。 –