将路由绑定到'/'是否响应Express中的所有404?

时间:2013-09-14 22:37:58

标签: node.js model-view-controller express routes

嗨,我是节点的新手,我遇到了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使用此路由?

关于我做错的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

将app.use更改为app.all修复了问题。有谁知道区别是什么?