2

嗨,我是 node 新手,我遇到了 Express 的路由问题。我正在尝试创建一个迷你 MVC 框架来创建测试项目并学习 node/noSQL。大部分代码都基于Express 存储库中的 MVC 示例( https://github.com/visionmedia/express/tree/master/examples/mvc )。除此之外,我在此处的帮助下添加了可扩展控制器:如何在 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 使用此路由?

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

4

1 回答 1

1

将 app.use 更改为 app.all 解决了这个问题。有谁知道有什么区别?

于 2013-09-15T02:51:10.407 回答