我有我的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)
如果我取消注释该行,一切顺利。 问题是什么?三江源
答案 0 :(得分:3)
您已将exports.mynewpage
放入mynewpage.js
文件,但未在任何地方引用该文件,并尝试在routes
对象中使用它。
当您为required
调用./routes
时,它只会加载index.js
,但不会加载该文件夹中的所有文件。
只需将该回调的代码放入routes.js
即可。
答案 1 :(得分:0)
var mynewpage = require('./routes/mynewpage');
必须要求以您创建的原始方式调用它。