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; }