2013-07-11 44 views
0

我有我的Node.js应用程序,而且我也使用Express.js框架。该目录结构如下:无法在我的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 throw new Error(msg); ^Error: .get() requires callback functions but got a [object Undefined] at /home/myuser/www/app-www/node_modules/express/lib/router/index.js:252:11 at Array.forEach (native) at Router.route (/home/myuser/www/app-www/node_modules/express/lib/router/index.js:248:13) at Router.(anonymous function) [as get] (/home/myuser/www/app-www/node_modules/express/lib/router/index.js:270:16) at Function.app.(anonymous function) [as get] (/home/myuser/www/app-www/node_modules/express/lib/application.js:413:26) at Object. (/home/myuser/www/app-www/app.js:35:5) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12)

如果我取消注释该行,则一切顺利。 什么问题? Thankyou

回答

3

您将exports.mynewpage置入mynewpage.js文件,但未将其引用到任何位置,并尝试从routes对象中使用它。
虽然您为./routes调用required,但它只会加载index.js,但不是来自该文件夹的所有文件。

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

+0

它被引用在app.js中:第一行,你可以看到require('./ routes')指令... – Andry

+0

此外index.js也是这样做的,它的工作原理 – Andry

+1

但它不包括所有的.js文件,只有index.js。 如果你想包含所有这些,那么你需要分别引用每个文件。 检查这个答案http://stackoverflow.com/questions/5364928/node-js-require-all-files-in-a-folder – moka

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

将不得不被要求才能将其称为您创建的原始方式。

相关问题