dzm*_*dzm 12 javascript node.js express
我在expressjs的单独文件夹中有路由.设置适用于"索引"页面,但不适用于任何其他路径.
这是我的routes.js,在我的路线文件夹中.
 module.exports = function(db) {
    return {
        index: function(req, res, next) {
            res.send('index');
        }
    }
}
这是我的routes.js,在我的路线文件夹中.
 module.exports = function(db) {
    return {
        join: function(req, res, next) {
            res.send('join');
        }
    }
}
在我的app.js中,我定义了这样的路线:
          var routes = require('./routes')(db);
          app.get('/', routes.index);
          app.get('/join', routes.join);
当我去,http://localhost:3000但当我去,http://localhost:3000/join我得到Cannot GET /join
如果我像这样定义我的连接路线:
 app.get('/join', function(req, res){
     res.send('join 2');
 });
这有效.
知道我在这里做错了吗?
谢谢!
我遇到了类似的问题,但后来记得这只是"只是javascript",并且能够混淆答案.
如果你想在多个文件中定义路由(而不是将它们全部塞入一个routes/index.js文件中),你可以用hackish方式构建routes对象(如下所示):
var express = require('express')
  , routes = {
       index: require('./routes').index
     , events: require('./routes/events.js').events
  }
  , hbs = require('hbs');
注意:你不需要 express和hbs定义(第一行和最后一行),我只是把它放在那里给你一些上下文.此代码段直接来自app.js文件的顶部.
注意.index并.events链接到require()函数调用.这是关键.我的events.js文件只有一个导出(事件):
exports.events = function(req, res){
  console.log('in events');
  res.render('events', { events: events, title: "EVENTS" });
  console.log('events done');
};
由于该require()函数基本上抓取一个文件并要求(导入)任何非私有变量(即附加到特殊exports对象的变量)并将它们暴露给包含该require()调用的文件,所以我只能抓住特定的函数I' m要求我通过require()呼叫包含的文件.如果我在所需文件中定义了多个导出,我想我可以像这样抓取它们(尚未测试):
routes = {
    index: require('./routes').index
  , events: require('./routes/events.js').events
  , favorites: require('./routes/events.js').favorites
  , upcoming: require('./routes/events.js').upcoming
}
我怀疑如果他们读了你的代码,这会给一群nodeJS或MVC的人带来动脉瘤(我打赌它会包含3次相同的文件,但我不确定).也许更好的做法:
routes = {
    index: require('./routes').index
  , events: require('./routes/events.js').events
  , favorites: require('./routes/favorites.js').favorites
  , upcoming: require('./routes/upcoming.js').upcoming
}
否则,为什么不把它们全部推入索引?不太确定,这只是我第二天使用Node及其相关技术......
如果在var声明后立即抛出console.log语句,也可能会对您有所帮助:
console.log(routes);
我测试了类似的场景,它对我有用。
我猜错误可能出在你的routes.js 文件中。你可能正在做:
routes.index = require('./index')(db);
routes.join = require('./join')(db);
也许你忘记调用方法了join,只是在做require(./join)。只是一个猜测。
| 归档时间: | 
 | 
| 查看次数: | 6748 次 | 
| 最近记录: |