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.

};

controllers / index.js:

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

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

controllers / posts.js:

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

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

然而,这个设置有一个大问题:我有一个数据库一个应用程序实例,我需要传递到actions(controllers / *。js)。我唯一可以想到的选择是,使两个变量全局,这不是一个真正的解决方案。我想从行动中分离路线,因为我有很多路线,并希望他们在一个中心的地方。

将变量传递给操作但将操作与路由分开的最好方法是什么?

解决方法

Node.js支持循环依赖。使用循环依赖而不是require(‘./ routes’)(app)清理大量代码,并使每个模块在其加载文件上的依赖性较小:

app.js

var app = module.exports = express(); //Now app.js can be required to bring app into any file

//some app/middleware setup,etc,including 
app.use(app.router);

require('./routes'); //module.exports must be defined before this line

routes / index.js

var app = require('../app');

app.get('/',function(req,res,next) {
  res.render('index');
});

//require in some other route files...each of which requires app independently
require('./user');
require('./blog');

—– 04/2014更新—–
Express 4.0通过添加express.router()方法来修复用于定义路由的用例。
文档 – http://expressjs.com/4x/api.html#router

从他们的新发电机的例子:
写路线:https://github.com/expressjs/generator/blob/master/templates/js/routes/index.js
将其添加/命名空间到应用程序:
https://github.com/expressjs/generator/blob/master/templates/js/app.js#L24

仍然有用于从其他资源访问应用程序的用例,因此循环依赖项仍然是一个有效的解决方案。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...