【问题标题】:nodejs async middlewares is not workingnodejs异步中间件不起作用
【发布时间】:2017-07-18 12:28:57
【问题描述】:

我正在尝试自己在 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())

【问题讨论】:

  • 你是否尝试用 promise 返回用户对象?
  • 没有。你能告诉我一个例子吗?
  • 看看this例子

标签: node.js express mongoose middleware


【解决方案1】:

我使用 promise 来解决问题。感谢@Vassilis Pallas 在 cmets 中的指导。

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();
        });

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2021-10-02
    • 2021-03-14
    • 2018-05-10
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多