【问题标题】:koa-router not working with generatorkoa-router 不能与生成器一起使用
【发布时间】:2017-03-16 12:18:13
【问题描述】:

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

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

【问题讨论】:

  • 这是什么版本的koa?
  • 什么版本的 koa-router?
  • 这是在 koa v2 和 koa-router v7.0.1 上

标签: javascript generator koa koa-router


【解决方案1】:

如果您使用的是 @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 并坚持使用生成器函数。

【讨论】:

    【解决方案2】:
    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;
    };
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2017-11-30
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多