Express中的模块化路由

我想使用module.exports将路线分成几个不同的文件。

这是一个非常简单的文件:

 // server/routes.js module.exports = function(app) { app.get('/', function(req, res) { res.render('index/index'); }); } 

我怎样才能将其导入我的入口点文件? 我到目前为止…

 var routes = require('./server/routes'); // ... // try to import routes instead app = routes(app); 

这导致我的服务器崩溃:

TypeError: Cannot read property 'listen' of undefined

更新:这是整个条目文件

 var express = require('express'); var app = express(); var colors = require('colors'); var moment = require('moment'); var exphbs = require('express-handlebars'); var routes = require('./server/routes'); // set port app.set('port', process.env.PORT || 3000); // set templating engine app.engine('.hbs', exphbs({defaultLayout: 'ApplicationLayout', extname: ".hbs"})); app.set('view engine', ".hbs"); // try to import routes instead //app = routes(app); // launch server app.listen(app.get('port'), function() { console.log( colors.rainbow('-------------------\n') + "App running on port: " + colors.red.underline(app.get('port')) + " " + colors.blue(moment().format('h:mm:ss a')) + colors.rainbow('\n-------------------') ); }); 

你在这里做一些奇怪的app = routes(app)因为你的function(app)什么都不返回

试试简单:

 routes(app); 

app是一个对象引用(不是对象的副本),所以无论你在函数内部做什么,它都会立即生效。

PS

你可以按照你写的方式来做,但在这种情况下, function(app)应该返回app

 module.exports = function(app) { app.get('/', function(req, res) { res.render('index/index'); }); return app; }