node.js - Express:如何将应用程序实例传递给来自不同文件的路由?

标签 node.js express

我想将我的路线分成不同的文件,其中一个文件包含所有路线,另一个文件包含相应的操作。我目前有一个解决方案来实现这一点,但是我需要将 app-instance 设为全局才能在操作中访问它。 我当前的设置如下所示:

app.js:

var express   = require('express');
var app       = express.createServer();
var routes    = require('./routes');

var controllers = require('./controllers');
routes.setup(app, controllers);

app.listen(3000, function() {
  console.log('Application is listening on port 3000');
});

routes.js:

exports.setup = function(app, controllers) {

  app.get('/', controllers.index);
  app.get('/posts', controllers.posts.index);
  app.get('/posts/:post', controllers.posts.show);
  // etc.

};

Controller /index.js:

exports.posts = require('./posts');

exports.index = function(req, res) {
  // code
};

Controller /posts.js:

exports.index = function(req, res) {
  // code
};

exports.show = function(req, res) {
  // code
};

但是,此设置有一个大问题:我需要将一个数据库和一个应用程序实例传递给操作( Controller /*.js)。我能想到的唯一选择是将两个变量都设为全局变量,这并不是真正的解决方案。我想将路线与 Action 分开,因为我有很多路线并且希望它们位于中心位置。

将变量传递给 Action 但将 Action 与路由分开的最佳方式是什么?

最佳答案

使用req.appreq.app.get('somekey')

通过调用 express() 创建的应用程序变量设置在请求和响应对象上。

见:https://github.com/visionmedia/express/blob/76147c78a15904d4e4e469095a29d1bec9775ab6/lib/express.js#L34-L35

关于node.js - Express:如何将应用程序实例传递给来自不同文件的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10090414/

相关文章:

javascript - api请求成功后如何在express中设置cookie

node.js - 在 Typescript 中扩展 Express 中间件

node.js - 有没有办法保持 Node js 集群 send() 消息的顺序

node.js - 使用express-session和express-socket.io-session NodeJs时出错

node.js - 用于 NodeJS 单元测试的模拟 AWS 服务

node.js - 当前端和后端位于不同端口时如何使 DocuSign 嵌入式签名正常工作

javascript - Discord.js:随机化存储为 json 文件的数组内容

javascript - 每个用户的express.js 唯一目录

node.js - node.js 中 SSL 连接的大约内存开销是多少

node.js - react native 转换错误