首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点Express.js访问来自以单独文件声明的路由的变量

问节点Express.js访问来自以单独文件声明的路由的变量
EN

Stack Overflow用户
提问于 2015-12-25 18:25:43
回答 2查看 2.6K关注 0票数 2

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

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

代码语言:javascript
复制
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文件中:

代码语言:javascript
复制
app.use('/users', require('./routes/user');

这是完美的,但问题是,我希望我的‘用户’路径访问一些变量已经声明到app.js文件,在app.use(...)之前

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-25 18:29:09

您可以将它们作为配置对象传递。另外,将您的路由更改为返回路由的函数,这样它就可以接受参数。

代码语言:javascript
复制
module.exports = function (options) {
  return function (req, res, next) {
    // do your thing
    // you have access to options variable as well
  }
}

在您的主JS文件中,要求该文件并调用它,并传递您所需的所有内容。

代码语言:javascript
复制
app.use('/users', require('./routes/user')({
  option1: 'value1',
  option2: 'value2'
}));

对于数据库连接、模型和其他第三方库,不需要将它们作为配置对象传递。将它们移动到外部文件并在您的路由文件中进行require是一个很好的实践。您需要尽可能多地解耦模块。

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

票数 2
EN

Stack Overflow用户

发布于 2015-12-25 18:57:47

要进行更全面的访问,可以创建要共享global.For示例的变量。

代码语言:javascript
复制
//app.js 
GLOBAL.config = {}

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

代码语言:javascript
复制
//config.js
module.exports = {logging:true} 

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

代码语言:javascript
复制
//app.js
GLOBAL.config = require('./config');

现在,它将在您的路由定义中可用。例如

代码语言:javascript
复制
//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');
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34465309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档