我正在尝试在nodejs,express和mongodb中创建OAuth身份验证流程。我想在每条路线之前检查我的MongoDB中是否有客户端。所以我做了一个中间件功能,检查我的数据库中是否有客户端ID和客户端密码。这是我的中间件功能
module.exports = function() {
return function(req, res, next) {
// Implement the middleware function based on the options object
winston.info("check client")
User.getClient(req.get("clientId"), req.get("clientSecret"), function (err, client) {
winston.info("checking time");
if (client) {
return next();
} else {
}
});
winston.info("check client done")
}
}
但是当我调用我的猫鼬模型时,我认为我的中间件并不完美。到异步调用结束时。脚本正在通过。 所以我想在这里实现的是,如果客户端在我们的数据库中可用,则中间件应该通过。所以中间件必须在得到猫鼬的响应之后继续前进。这是我的路由器代码。
var express = require('express')
, router = express.Router()
, clientVerify = require("../middlewares/clientVerify");
router.use(clientVerify())
答案 0 :(得分:0)
我用诺言解决了这个问题。感谢@Vassilis Pallas在评论中的指导。
return new Promise( function(resolve,reject){
User.getClient(req.get("clientId"), req.get("clientSecret"), function (err, client) {
winston.info(client);
if (client) {
resolve( client );
} else {
res.status(401).send({
status: 401,
message: "unauthorized"
});
}
});
}).then(function(saveResult){
saveResult = saveResult && typeof saveResult == 'object' ? saveResult.toJSON() : saveResult;
winston.info(saveResult);
if (saveResult)
return next();
});