我正在使用nodejs + Express作为我的后端服务。
我有一个authenHandler.js文件来帮助使用sequelize进行身份验证:
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语句之后,promise返回了值。
我不确定如何连接authenHandler.js和app.js.最好的方法是什么?
答案 0 :(得分:1)
更改它以返回承诺
rbenv rehash
然后消费承诺
isAuthenticated: function(data) {
return models.Users.find(data)
.then(function(user) {
if (user) {
return true;
} else {
return false;
}
});
}
答案 1 :(得分:1)
你的app.js错了,isAuthenticated返回promise不返回bool
你需要像这样修改app.js
app.use(function(req, res, next) {
// process to retrieve data
authProvider.isAuthenticated(data)
.then(function(isAuthenticated) {
if (isAuthenticated) {
console.log("auth passed.");
next();
}
else {
var err = new Error(authenticationException);
err.status = 403;
next(err);
}
});
}
})