今天遇到的一个奇怪的坑 koa2+bodyParser+router
发布于 5 年前 作者 Yuki-Minakami 3740 次浏览 来自 分享
  var Koa = require('koa');
  var router = require('koa-router')();
  const bodyParser = require('koa-bodyparser');
  var app = new Koa();
  // app.use((ctx,next)=>{
  //     ctx.set('Access-Control-Allow-Origin','*');
  //     next();
  // });
  router.get('/', (ctx, next) => {
	  console.log('Get get');
	  ctx.body="end";
  });
  router.post('/test', (ctx, next) => {
	  console.log('Get post');
	  ctx.body="end";
  });
  app.use(bodyParser());
  app
	.use(router.routes())
	.use(router.allowedMethods());
	app.listen(4000);

使用curl测试,get和post都能正常工作,但只要设置了Access-Control-Allow-Origin(注释掉的部分),get还能正常工作,post就fail了

6 回复

另外如果改一下顺序,就可以正常工作了

  app.use(bodyParser());
  app
	.use(router.routes())
	.use(router.allowedMethods());
  
  app.use((ctx,next)=>{
	  ctx.set('Access-Control-Allow-Origin','*');
	  next();
  });

koa的中间件单个还好,组合起来用真的各种心累

@zuohuadong 跑题了大胸弟

你这应该是koa2中间件的写法不对吧,加个return或者await next()应该就可以了 https://cnodejs.org/topic/5792c2222d740f7c26637e08

@gzf1234 说的对,没有 await next()

@gzf1234 @liangtongzhuo 谢谢两位的回答,我也发现了这个问题,之前用router和views的时候也遇到过return next()的问题 koa中间件组合到一块的时候很容易遇到这种坑 心累

回到顶部