0

这是代码,做转发用的,但是ctx.response.body会前端的是404

router.get('/getData', async (ctx, next) => {

  let opts = Object.keys(ctx.query).reduce((pre, item, index) => {
    return pre += `${item}=${encodeURIComponent(ctx.query[item])}&`
  }, '?')
  
  // const getData = await request.get(`https://searchapi.hc360.com/getmmtlast.cgi${opts}`)
  // console.log('getData', getData.query);

  request({
    url: `https://searchapi.hc360.com/getmmtlast.cgi${opts}`,
    method: 'GET',
    encoding: null
  }, function(err, res, data) {
    if (!err && res.statusCode == 200) {
      console.log('data', Iconv.decode(data, 'gbk'));
      ctx.response.body = Iconv.decode(data, 'gbk')
    } else ctx.response.body = err;
  })
  await next();
})
2018-12-07 提问
2 个回答
1

已采纳

因为request是一个异步的过程,请求 /getData 时并没有执行到 ctx.response.body ,这里await request的结果赋给ctx

1

如果你要是为了学习转发接口的,可以百度查一下
如果是为了解决接口跨域,或者是跨服务请求接口,可以使用koa-server-http-proxy

const proxy = require('koa-server-http-proxy');
app.use(proxy('/api', {
  target: 'https://www.shoujinwang.com/',
  pathRewrite: { '^/api': '/' },
  changeOrigin: true
}))

可以直接针对自定义前缀的接口进行转发

撰写答案

你可能感兴趣的

推广链接