【问题标题】:Nodejs + Express4 : Export variable from module and access it in routeNodejs + Express4:从模块导出变量并在路由中访问它
【发布时间】:2014-08-20 01:10:11
【问题描述】:

我想制作一个从数据库中检索一些信息的模块。因为我的大部分路线都需要代码,所以我认为一个模块非常适合它。

所以基本上我的模块会查询数据库并将结果推送到数组中。问题是我无法访问路由页面中的数组。

是否有可能或者我应该将数组存储到 session 或一些 res.local 变量中,还是我对 module.exports 函数做错了什么?

这是模块代码的一部分:

function myModule(req, res, next){
    if(req.session.userid){
        var result = [];
        //query the db etc...
        return result;      
    }else{
        return next();
    }               
}

module.exports = myModule;

还有我的路线:

var myModule= require('./middleware/mymodule');

module.exports = function(app){
   app.get('something', function(req, res){
       console.log(myModule);
   });
};

console.log(myModule) 返回[Function: myModule]

另外使用app.get('something', myModule, function(req, res){有什么区别,是发送自定义响应吗?

感谢您的帮助

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    您尝试使用错误的中间件。 您可以做的一种方法是创建将结果添加到您的请求对象的中间件。

    myMiddleware.js

    function myMiddleware(req, res, next) {
      var result = [];
      if(req.session.userid) {
        //query the db etc
      }
      req.myResult = result;  // May be empty if no req.session.userid
      return next();
    }
    module.exports = myMiddleware;
    

    route.js

    var myMiddleware = require('./middleware/myMiddleware');
    
    module.exports = function(app) {
      app.get('something', myMiddleware /* Use myMiddleware */, function(req, res) {
        console.log(req.myResult);  // The result is part of the request object
        return res.send('Hello world');
      }
    }
    

    使用时:

    app.get('something', myMiddleware, function(req, res) {
    

    您是说首先调用 myMiddleware,然后next(); 调用您的路由函数,同时传递更改后的req 对象和res 对象。

    【讨论】:

      猜你喜欢
      • 2019-02-04
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      相关资源
      最近更新 更多