3

我是快递新手。我做路由的方式是回退一个错误。

这是我的相关代码:

应用程序.js

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path')
  , firebase = require('firebase');

...

// Routing
app.get('/', routes.index);
app.get('/play', routes.play);

index.js 和 play.js

exports.index = function(req, res){
  res.sendfile('views/index.html');
};

exports.play = function(req, res){
  res.sendfile('views/play.html');
};

这是错误:

错误:.get() 需要回调函数,但得到了 [object Undefined]

它在 app.js 中引用了这一行

app.get('/play', routes.play);

我不知道为什么这不起作用,因为代码结构对于路由到我的索引页面是相同的,并且索引页面加载完美。

有任何想法吗?谢谢

4

1 回答 1

6

问题可能routes.play是预期undefined的时间。function

console.log(typeof routes.play); // ...

如果您routes至少作为注释被拆分为多个文件,“ index.js 和 play.js ”建议:

// routes/index.js
exports.index = function(req, res){
  res.sendfile('views/index.html');
};
// routes/play.js
exports.play = function(req, res){
  res.sendfile('views/play.html');
};

需要一个目录通常只包括index.js. 所以,你仍然需要require('./play')自己在某个地方。

  1. 您可以在以下范围内“转发”它index.js

    exports.index = function(req, res){
      res.sendfile('views/index.html');
    };
    
    var playRoutes = require('./play');
    exports.play = playRoutes.play;
    

    或者:

    exports.play = require('./play');
    
    app.get('/play', routes.play.play);
    
  2. 或者也直接要求它app.js

     var express = require('express')
      , routesIndex = require('./routes')
      , routesPlay = require('./routes/play')
    // ...
    
    // Routing
    app.get('/', routesIndex.index);
    app.get('/play', routesPlay.play);
    
于 2013-08-19T23:46:55.513 回答