Nodejs + Express4:从模块导出变量并在路由中访问它

时间:2014-08-19 16:54:58

标签: node.js express

我想创建一个从数据库中检索一些信息的模块。由于我在大多数路线中都需要代码,因此我认为模块非常适合它。

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

是否可以或应该将数组存储到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){有什么区别,发送自定义回复只有 吗?

感谢您的帮助

1 个答案:

答案 0 :(得分: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对象。