Node Express.js从单独文件中声明的路由访问变量

时间:2015-12-25 18:25:44

标签: javascript node.js express

我目前正在开发一个使用大量路线的网站。 一开始,所有路由都在同一个文件中实现...... 为了使事情更清楚,我决定创建多个文件,以便使用路由器模块分离路由。

例如,在我的users.js文件中,我有:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

module.exports = router;

并在我的主app.js文件中:

app.use('/users', require('./routes/user');

这很有效,但问题是我想要我的用户'路线 在app.use(...)

之前访问已声明到app.js文件中的一些变量

我知道我可以使用requiremodule.exports,但是必须在我的app.js中声明一些变量,只有一次,我必须从我包含的路径中访问它们。

2 个答案:

答案 0 :(得分:2)

您可以将它们作为配置对象传递。同时将路线更改为返回路线的功能,这样可以采用参数。

ORDER BY

在你的主JS文件中,需要文件并调用它,并传递你所需要的一切。

module.exports = function (options) {
  return function (req, res, next) {
    // do your thing
    // you have access to options variable as well
  }
}

对于数据库连接,模型和其他第三方库,您无需将它们作为配置对象传递。将它们移动到外部文件并将app.use('/users', require('./routes/user')({ option1: 'value1', option2: 'value2' })); 移动到路径文件中是一种很好的做法。你需要尽可能多地解耦模块。

请记住,require将加载每个模块一次,其余时间,它只返回对先前加载的模块的引用。请查看this question以获取更多信息。

答案 1 :(得分:1)

要获得更全面的访问权限,请将要共享的变量设为全局。例如

//app.js 
GLOBAL.config = {}

最好为您的应用程序配置使用单独的文件。例如

//config.js
module.exports = {logging:true} 

并将其作为app.js文件中的全局变量,如下所示

//app.js
GLOBAL.config = require('./config');

现在它将在您的路由定义中提供。例如

//routes/users.js
router.get('/', function(req, res, next) {
    if(config.logAccess){
      var accessTime = new Date();
     console.log('access at '+accessTime.toTimeString());
    }
   res.send('respond with a resource');
});