koa-router 不与发电机一起工作

Ela*_*itz 1 javascript generator koa koa-router

当我使用生成器时,我一直在努力让 koa 响应请求。我写了一个 test.js 应用程序来演示这一点。

var koa = require('koa');
var app = new koa();
var Router = require('koa-router');
var router = new Router();

router.get('/', function *(next){
    this.body = "hello world";
    console.log("success")
});

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

app.listen(3000);
console.log("listening on 3000");
Run Code Online (Sandbox Code Playgroud)

我用 node v4.6.1 运行服务器

没有发生错误,但是当我发送 get 请求时,我得到Not Found并且没有控制台日志。

这段代码虽然有效:

var koa = require('koa');
var app = new koa();
var Router = require('koa-router');
var router = new Router();

router.get('/', function (ctx){
    ctx.body = "hello world";
    console.log("success")
});

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

app.listen(3000);
console.log("listening on 3000");
Run Code Online (Sandbox Code Playgroud)

知道为什么发电机不运行吗?

saa*_*adq 5

如果您使用的@next是 koa 和 koa-router 版本,您应该async为中间件使用函数而不是用于 Koa v1 的生成器函数。

例子:

var koa = require('koa');
var app = new koa();
var Router = require('koa-router');
var router = new Router();

router.get('/', async function (ctx){
    // You can use `await` in here
    ctx.body = "hello world";
    console.log("success")
});

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

app.listen(3000);
console.log("listening on 3000");
Run Code Online (Sandbox Code Playgroud)

当然,async/await目前不支持,除非您使用 Node v7 并使用该--harmony-async-await标志。如果你想在 Node v4 中使用它,你将不得不使用类似的东西babel来转换你的代码。如果您不想为服务器端代码构建步骤,我建议您只使用 Koa v1 并坚持使用生成器函数。