dzm*_*dzm 12 javascript node.js express
我在expressjs的单独文件夹中有路由.设置适用于"索引"页面,但不适用于任何其他路径.
这是我的routes.js,在我的路线文件夹中.
module.exports = function(db) {
return {
index: function(req, res, next) {
res.send('index');
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的routes.js,在我的路线文件夹中.
module.exports = function(db) {
return {
join: function(req, res, next) {
res.send('join');
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的app.js中,我定义了这样的路线:
var routes = require('./routes')(db);
app.get('/', routes.index);
app.get('/join', routes.join);
Run Code Online (Sandbox Code Playgroud)
当我去,http://localhost:3000但当我去,http://localhost:3000/join我得到Cannot GET /join
如果我像这样定义我的连接路线:
app.get('/join', function(req, res){
res.send('join 2');
});
Run Code Online (Sandbox Code Playgroud)
这有效.
知道我在这里做错了吗?
谢谢!
我遇到了类似的问题,但后来记得这只是"只是javascript",并且能够混淆答案.
如果你想在多个文件中定义路由(而不是将它们全部塞入一个routes/index.js文件中),你可以用hackish方式构建routes对象(如下所示):
var express = require('express')
, routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
}
, hbs = require('hbs');
Run Code Online (Sandbox Code Playgroud)
注意:你不需要 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');
};
Run Code Online (Sandbox Code Playgroud)
由于该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
}
Run Code Online (Sandbox Code Playgroud)
我怀疑如果他们读了你的代码,这会给一群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
}
Run Code Online (Sandbox Code Playgroud)
否则,为什么不把它们全部推入索引?不太确定,这只是我第二天使用Node及其相关技术......
如果在var声明后立即抛出console.log语句,也可能会对您有所帮助:
console.log(routes);
Run Code Online (Sandbox Code Playgroud)
我测试了类似的场景,它对我有用。
我猜错误可能出在你的routes.js 文件中。你可能正在做:
routes.index = require('./index')(db);
routes.join = require('./join')(db);
Run Code Online (Sandbox Code Playgroud)
也许你忘记调用方法了join,只是在做require(./join)。只是一个猜测。
| 归档时间: |
|
| 查看次数: |
6748 次 |
| 最近记录: |