我无法相信这样做没有简单的答案。 我希望重定向让我们说;
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。
答案 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
挂载其他路由器时,这会产生干扰。