将app.js中的params传递给route.js

我有app.js与下面的代码,我有额外的文件,这被称为router.js处理请求的这样的post / read / etc

这是app.js

 var express = require('express'); module.exports = function () { var app = express(); .... require('./router/routes')(app, express); return app; }; 

router.js看起来像下面

* /

 module.exports = function (app, express) { var appRouter = express.Router(); app.use(appRouter); appRouter.route('*') .post(function (req, res) { handler.dispatch(req, res); }) .get(function (req, res) { handelr.dispatch(req, res) }) 

有一个很好的方法来避免传递两个参数 (应用程序,expression)?

是的,改变你的文件结构的方式,所以你可以只需要应用程序和expression。 现在,您不再需要将每个模块封装在一个函数中,也不需要传递任何参数。

app.js

 var express = require('express'); var app = express(); module.exports = app; app.boot = function () { // require in middleware, routes, etc, then start listening. require('./middleware'); require('./routes'); // middleware that comes after routes, such as error handling require('./middleware/after'); app.listen(); } if (require.main === module) { //move execution to next tick so we can require app.js in other modules safely process.nextTick(app.boot); } 

routes.js

 var express = require('express'); var app = require('./app'); var appRouter = express.Router(); app.use(appRouter); appRouter.route('*'); appRouter.get('/foo', function () {...}); appRouter.post('/foo', function () {...}); module.exports = appRouter; // for unit testing, or you can use this to attach it in app.js instead. 

此外,通过将引导function附加到app ,您现在可以将此应用程序包含到另一个快速应用程序中,并在需要时将其作为路由器附加,而无需更改任何内容。 所有你需要做的就是需要它,附加它,然后执行app.boot来附加所需的中间件/路由。 (对unit testing有用)

没有“好”的方法来摆脱app的传递。 express你可以“避免”通过简单地添加var express = require('express'); 在脚本的顶部。

另一个select是导出你的路由器,并将其安装在父脚本中。 例如:

router.js

 var appRouter = require('express').Router(); appRouter.route('*') // ... module.exports = appRouter; 

app.js

 var router = require('./router'); var app = require('express')(); app.use(router); 

您不需要传递express因为您可以在routes.js只需要它,而无需额外的开销(您已经在app.js中需要它,所以您只需要对同一个对象进行引用)。

此外,你的路由器不需要知道应用程序。 实际上,从你的routes.js返回一个路由器并从app.js使用它是更有意义的。 这被称为“分离关注”。 app.js处理app创build和修改,而routes.js处理path的创build和修改。

app.js

 var express = require('express'); var routes = require('./router/routes'); module.exports = function () { var app = express(); app.use(routes); return app; }; 

router.js

 var express = require('express'); module.exports = function () { var appRouter = express.Router(); appRouter.route('*') return appRouter; };