Express中的模块化路由

时间:2016-01-18 18:40:53

标签: node.js 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-------------------')
  );
});

1 个答案:

答案 0 :(得分:3)

由于您的app = routes(app)没有返回任何内容,因此您在function(app)做了一些奇怪的事情。

尝试简单:

routes(app);

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

P.S。

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

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