Koa路由器路由URL不存在

时间:2015-03-24 21:01:55

标签: node.js koa

我无法相信这样做没有简单的答案。 我希望重定向让我们说;

www.example.com/this-url-does-not-exist

www.example.com/

必须有一种方法,所有带有koajs的nodejs网站都无法崩溃?继承我的路由器(我正在使用koa和koa路由器):

router
    .get('/', function* (next) {
        this.body = "public: /";
    })
    .get('/about', function* (next) {
        this.body = "public: /about";
    })
    .get('*', function* (next) { // <--- wildcard * doesn't work
        this.body = "public: *";
    });

并且不要告诉我使用正则表达式,我一直在尝试并使用它们,这意味着在添加URL等时手动更新表达式,这不是我想要的,加上它不起作用因为javascript不支持负面的lookbehinds。

2 个答案:

答案 0 :(得分:11)

如果您不喜欢正则表达式,请执行以下操作:

var koa   = require('koa'),
    router = require('koa-router')(),
    app   = koa();


router.get('/path1', function *(){
    this.body = 'Path1 response';
});

router.get('/path2', function *(){
    this.body = 'Path2 response';
});

app.use(router.routes())
app.use(router.allowedMethods());

// catch all middleware, only land here
// if no other routing rules match
// make sure it is added after everything else
app.use(function *(){
  this.body = 'Invalid URL!!!';
  // or redirect etc
  // this.redirect('/someotherspot');
});

app.listen(3000);

答案 1 :(得分:1)

JAMES MOORES ANSWER是正确的;请勿聆听MEH!

publicRouter
    .get('/', function* (next) {
        console.log('public: /');
        this.body = 'public: /';
    })
    .get('/about', function* (next) {
        console.log('public: /about');
        this.body = 'public: /about';
    })
    .get(/(|^$)/, function* (next) { // <--- important that it is last
        console.log('public: /(|^$)/');
        this.body = 'public: /(|^$)/';
    });

Koa-router无法通知.get依赖于代码中添加的订单。因此,使用正则表达式/(|^$)/将其放在最后。

但是,当使用koa-mount挂载其他路由器时,这会产生干扰。