嗨,我是节点的新手,我遇到了Express的路由问题。我正在尝试创建一个迷你MVC框架来创建测试项目并学习node / noSQL。大多数代码都基于Express repo中的MVC示例(https://github.com/visionmedia/express/tree/master/examples/mvc)。除此之外,我还在这里添加了可扩展控制器:How to create extendable controllers in ExpressJS
代码:https://github.com/monsterlane/node-runner
问题出在https://github.com/monsterlane/node-runner/blob/master/app/boot/index.js第33-43行。
if ( key == 'index' && name == 'main' ) {
method = 'get';
path = '/';
}
else if ( key == 'index' ) {
method = 'get';
path = '/' + name;
}
else {
throw new Error( 'unrecognized route: ' + name + '.' + key );
}
我在这个块中尝试做的是分配主控制器以响应localhost /以及每个其他控制器响应localhost / controller /。如果我将第35行更改为/ main(而不是/),则404将正确地通过引导进入app / index.js中的错误处理程序:
// load controllers
require( './boot' )( app, { verbose: !module.parent } );
// assume "not found" in the error msgs is a 404
app.use( function( err, req, res, next ) {
// treat as 404
if ( ~err.message.indexOf( 'not found' ) ) return next( );
// log it
console.error( err.stack );
// error page
res.status( 500 ).render( '5xx' );
});
使用代码,如果我去任何无效的URL,localhost / deep,localhost / doop他们都返回主模块?由于某种原因,它似乎绑定到'/'使任何无效的URL使用此路由?
关于我做错的任何想法?谢谢!
答案 0 :(得分:1)
将app.use更改为app.all修复了问题。有谁知道区别是什么?