【问题标题】:Return a value from express js middleware从 express js 中间件返回一个值
【发布时间】:2014-01-24 07:12:37
【问题描述】:

下面的代码是我的快速中间件调用

var c = app.use(myMiddleware());

console.log(c);

//中间件函数

module.exports = function() {

    return function(req, res, next) {
       var b =  {'A' : 1};
        next();
    }

};

在上面的代码中,console.log 在应用程序启动后打印控制台。

我想从中间件返回/传递一个值到我的 express 应用程序。请问有什么建议吗?

【问题讨论】:

    标签: javascript node.js express middleware


    【解决方案1】:

    将您想在请求范围内使用的任何内容设置为 req 对象。

    app.use(function(req, res, next) {
      var b =  {'A' : 1};
      req.b = b;
      next();
    });
    

    然后你可以在你的请求处理程序中使用它:

    app.get('/test', function(req, res){
      console.log(req.b);
    });
    

    【讨论】:

    • 我已经编辑了我的解决方案。请检查它是否有效。
    • app.get 不工作,但如果我们使用下面的代码,那么它工作 app.use(function(req, res, next) { console.log("Middleware", req.b); }) ;
    • 是的,你的权利,但是当我请求 localhost:3000/test 时 req.b 未定义,但当我请求 localhost:3000/ 时 app.use(function) 正在工作/我不明白发生了什么
    【解决方案2】:

    应该这样做:

    var c = app.use(myMiddleware({
      callback: function(c) {
        console.log(c)
      }
    }))
    

    //中间件函数

    module.exports = function(options) {
      return function(req, res, next) {
        var b =  {'A' : 1}
        next()
      }
    }
    

    或者这个:

    var x = myMiddleware()
    var c = app.use(x.function)
    console.log(x.something)
    

    //中间件函数

    module.exports = function(options) {
      options && options.callback && options.callback('Hello world!')
    
      return {
        function: function(req, res, next) {
          var b =  {'A' : 1}
          next()
        },
        something: 'Hello world!',
      }
    }
    

    【讨论】:

    • 第二个例子不适合我的需要,因为“Hello world”在应用程序启动时打印。需要根据要求获取价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多