【问题标题】:Cannot set a route in my Node.js Express.js application无法在我的 Node.js Express.js 应用程序中设置路由
【发布时间】:2013-07-09 13:34:36
【问题描述】:

我有我的 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 抛出新的错误(味精); ^ 错误:.get() 需要回调函数,但得到了 [object Undefined] 在/home/myuser/www/app-www/node_modules/express/lib/router/index.js:252:11 在 Array.forEach (本机) 在 Router.route (/home/myuser/www/app-www/node_modules/express/lib/router/index.js:248:13) 在 Router.(匿名函数) [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) 在 Object.Module._extensions..js (module.js:474:10) 在 Module.load (module.js:356:32) 在 Function.Module._load (module.js:312:12)

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

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    您将exports.mynewpage 放入mynewpage.js 文件中,但没有在任何地方引用它,并试图从routes 对象中使用它。
    虽然您为 ./routes 调用了 required,但它只会加载 index.js,但不会加载该文件夹中的所有文件。

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

    【讨论】:

    • 它在app.js中被引用:第一行,可以看到require('./routes')指令...
    • 但它不会包含所有 .js 文件,只包含 index.js。如果要包含所有这些文件,则需要单独引用每个文件。检查这个答案stackoverflow.com/questions/5364928/…
    • 非常感谢您的怀疑:)
    • '你不能毫无疑问地拥有信仰' - 亚伯拉罕
    【解决方案2】:
    var mynewpage = require('./routes/mynewpage');
    

    必须要求才能将其称为您创建的原始方式。

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2016-12-23
      • 2016-12-28
      • 2018-03-03
      • 2016-05-01
      相关资源
      最近更新 更多