koa-router不使用发电机

时间:2016-11-03 01:52:02

标签: 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");

我使用节点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");

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:-1)

namespace App\Http\Controllers;
use App\Product;
use Illuminate\Http\Request;

class ProductImageController
{
public function update(Request $request, $id)
   {
        $path = $request->file('file')->store('images');
        $product = Product::find($id);
        $product->img_url = $path;
        return $product->save() ?
            response(["error_code" => 0, $product]) :
            response(["error_code" => 1]);
   }
}