我想把我的路由分成不同的文件,其中一个文件包含所有路由,另一个对应的操作。我目前有一个解决方案来实现这一点,但我需要使应用程序实例全局,以便能够在操作中访问它。
我当前的设置如下所示:
我当前的设置如下所示:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。