1

当我使用生成器时,我一直在努力让 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 运行服务器

没有发生错误,但是当我发送获取请求时,我得到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");

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

4

2 回答 2

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");

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

于 2016-11-05T15:43:52.687 回答
-1
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;
};
于 2017-08-09T13:07:34.957 回答