koa2跨域

koa2尝试写了一个RESTful api,但是调试这个接口的时候,发现需要跨域,于是我引入了koa-cors这个koa插件,控制台还是提示存在跨域问题,然后我百度一下,说加header配置项

this.set('Cache-Control','no-cache');
this.set('Access-Control-Allow-Origin','*');

就是上面这个,测试了一下,还是没用,想也想半天了,看不出问题出在哪里,求大神帮忙看下,源码如下

var koa = require('koa');
var router = require('koa-router');
var co = require('co');
var fs = require('fs');
var cors = require('koa-cors');
var app = new koa();
var route = new router();
var filePath = './app/user.json';

var readFromFile = function(){
    return new Promise(function(resolve,reject){
        fs.readFile(filePath,function(err,data){
            if(err){
                reject(err)
            }
            resolve(data)
        })
    })
}


route.get('/user',co.wrap(function*(ctx,next){
    // this.set('Cache-Control','no-cache');
    // this.set('Access-Control-Allow-Origin','*');
    var user = JSON.parse(yield readFromFile())
        ctx.body = JSON.stringify({status:'success',data:user})
    // try{
    //     var user = JSON.parse(yield readFromFile())
    //     ctx.body = JSON.stringify({status:'success',data:user})
    // }catch(err){
    //     ctx.status = 500;
    //     ctx.body = JSON.stringify({status:'fail'})
    // }
}))

app.use(cors())
app.use(route.routes()).use(route.allowedMethods())

app.listen(3000,function(){
    console.log('start in 3000 port ...')
});
阅读 26.2k
5 个回答

你的跨域插件是koa1的,你试试看这个 koa2-cors 。我用这个是没问题的,也不需要再设置请求头。

好像是顺序的问题, 你应该吧 app.use(cors()) 放在所有的 router 之前。

新手上路,请多包涵
新手上路,请多包涵

ctx.set('Access-Control-Allow-Origin','*')

新手上路,请多包涵

把cors放在前面就好了


app.use(cors())

route.get('/user',co.wrap(function*(ctx,next){
    // this.set('Cache-Control','no-cache');
    // this.set('Access-Control-Allow-Origin','*');
    var user = JSON.parse(yield readFromFile())
        ctx.body = JSON.stringify({status:'success',data:user})
    // try{
    //     var user = JSON.parse(yield readFromFile())
    //     ctx.body = JSON.stringify({status:'success',data:user})
    // }catch(err){
    //     ctx.status = 500;
    //     ctx.body = JSON.stringify({status:'fail'})
    // }
}))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进