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

标签 javascript node.js express

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

例如,在我的 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.js 文件中在 app.use(...)

之前声明的一些变量

我知道我可以使用 requiremodule.exports,但有些变量必须在我的 app.js 中声明一次,而且我必须从我包括的路线。

最佳答案

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

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

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

app.use('/users', require('./routes/user')({
  option1: 'value1',
  option2: 'value2'
}));

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

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

关于javascript - Node Express.js 从单独文件中声明的路由访问变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34465309/

相关文章:

javascript - 如何在Smart GWT中限制拖动?

javascript - 如何创建流畅的动画流动按钮?

javascript - Sails.js/水线 : groupBy + count

javascript - nodejs post方法中的第二个参数是什么

node.js - Nodejs express API 一个 sequelize(db) 实例到所有模型

javascript - 检查 Jquery 日期是否有效

javascript - Socket.io:如何限制从客户端发送到 websocket 服务器的数据大小

node.js - 我想通过 sequelize 更改表的列名

javascript - FullCalendar:最初未从函数调用 (AJAX) 呈现的事件

node.js - Docker 运行失败 "return process.dlopen(module, path.toNamespacedPath(filename));"