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

koa-router not working with generator

当我使用生成器时,我一直在努力让 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");

我运行节点为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");

知道为什么生成器不 运行 吗?

如果您使用的是 @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");

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

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

var route = router();                   // These three lines will help you 
app.use(route.routes());                // to route to your given path and      
route.get("/user/", functionname);      // will call the generator function.

function *functionname(next){
console.log('in side the function');
this.body="hi this is my new page";

yield next;
};