0

平台节点:v-4.4.5 koa:v-2.0.0 koa-router:v-7.0.0

这是我的代码

///<reference path="../typings/tsd.d.ts" />
//导入koa,和koa 1.x不同,在koa2中,我们导入的是一个class,因此用大写的Koa表示:
var Koa = require('koa');

var router=require("koa-router")();


// 创建一个Koa对象表示web app本身:
var app = new Koa();

// parse request body:


//add url-route:
router.get('/hello/:name', (ctx, next) => {
    var name = ctx.params.name;
    ctx.response.body =`<h1>Hello, ${name}!</h1>`;
});

router.get('/',  function *(ctx, next) {
    ctx.response.body = '<h1>Index</h1>';
});

router.all('/login', function *() {
  this.redirect('/');
  this.status = 301;
});

app.use(function (ctx,next){
  this.body = `Invalid URL!!!${ctx.request.method} ${ctx.request.url}`;
  ctx.response.type = 'text/html';
  ctx.response.body = this.body;
});

app.use(router.routes())
.use(router.allowedMethods());
// 在端口3000监听:
app.listen(3000);
console.log('app started at port 3000...');

当我浏览http://localhost:3000/ 时,输出“无效的 URL!!!”。告诉我为什么不能匹配'/'路由器?谢谢你!

4

2 回答 2

3

您可以使用 '*' 来匹配 404 或无效链接之类的 url:

router.all('*', function(ctx, next) {
  //
});
于 2017-08-06T15:23:12.557 回答
0

将您的节点版本升级到 7.6.0。koa2 在 >=7.6.0 上工作,代码类似

Koa=require('koa')
    var app = new Koa();
    router = require('koa-router')()
    // parse request body:


    //add url-route:
    router.get('/hello/:name', (ctx, next) => {
        var name = ctx.params.name;
        ctx.response.body =`<h1>Hello, ${name}!</h1>`;
    });

    router.get('/',  function (ctx, next) {
        console.log(ctx.request);
        ctx.body = '<h1>Index</h1>';
    });

    router.all('/login', function (ctx) {
      ctx.redirect('/');
      ctx.status = 301;
    });

    app.use(function (ctx,next){
      this.body = `Invalid URL!!!${ctx.request.method} ${ctx.request.url}`;
      ctx.response.type = 'text/html';
      ctx.response.body = this.body;
      next()
    });

    app.use(router.routes())
    .use(router.allowedMethods());
    // 在端口3000监听:
    app.listen(3000);
    console.log('app started at port 3000...');
于 2017-08-03T19:03:57.467 回答