无法在我的Node.js Express.js应用程序中设置路由

时间:2013-07-11 10:11:20

标签: node.js express

我有我的Node.js应用程序,我也在使用Express.js框架。目录结构如下:

myapp
  +-- node_modules
  +-- public
  +-- routes
         |-- index.js
         |-- mynewpage.js
  +-- views
         |-- index.ejs
         |-- mynewpage.ejs
  |-- app.js
  |-- package.json

app.js文件是这样的:

 2  /**
 3   * Module dependencies.
 4   */
 5  
 6  var express = require('express')
 7    , routes = require('./routes')
 9    , http = require('http')
10    , path = require('path');
11  
12  var app = express();
13  
14  // all environments
15  app.set('port', process.env.PORT || 3000);
16  app.set('views', __dirname + '/views');
17  app.set('view engine', 'ejs');
18  app.use(express.favicon());
19  app.use(express.logger('dev'));
20  app.use(express.bodyParser());
21  app.use(express.methodOverride());
22  app.use(express.cookieParser('your secret here'));
23  app.use(express.session());
24  app.use(app.router);
25  app.use(require('less-middleware')({ src: __dirname + '/public' }));
26  app.use(express.static(path.join(__dirname, 'public')));
27  
28  // development only
29  if ('development' == app.get('env')) {
30    app.use(express.errorHandler());
31  }
32  
33  app.get('/', routes.index);
35  app.get('/mynewpage', routes.mynewpage); /* THIS LINE */
36  
37  http.createServer(app).listen(app.get('port'), function(){
38    console.log('Express server listening on port ' + app.get('port'));
39  });

档案mynewpage.js如下:

exports.mynewpage = function(req, res){
  res.render('mynewpage', { title: 'Hello' }, function(err, html) {});
};

当我尝试使用我标记为取消注释的行时node app.js,我收到此错误:

  

/home/myuser/www/app-www/node_modules/express/lib/router/index.js:252       抛出新错误(msg);             ^错误:.get()需要回调函数但得到一个[对象未定义]       在/home/myuser/www/app-www/node_modules/express/lib/router/index.js:252:11       at Array.forEach(native)       在Router.route(/home/myuser/www/app-www/node_modules/express/lib/router/index.js:248:13)       在路由器。(匿名函数)[as get](/home/myuser/www/app-www/node_modules/express/lib/router/index.js:270:16)       在Function.app。(匿名函数)[as get](/home/myuser/www/app-www/node_modules/express/lib/application.js:413:26)       在对象。 (/home/myuser/www/app-www/app.js:35:5)       在Module._compile(module.js:456:26)       at Object.Module._extensions..js(module.js:474:10)       在Module.load(module.js:356:32)       在Function.Module._load(module.js:312:12)

如果我取消注释该行,一切顺利。 问题是什么?三江源

2 个答案:

答案 0 :(得分:3)

您已将exports.mynewpage放入mynewpage.js文件,但未在任何地方引用该文件,并尝试在routes对象中使用它。
当您为required调用./routes时,它只会加载index.js,但不会加载该文件夹中的所有文件。

只需将该回调的代码放入routes.js即可。

答案 1 :(得分:0)

var mynewpage = require('./routes/mynewpage');

必须要求以您创建的原始方式调用它。