node 作为中间层调后台api,拿到结果之后如何返回给浏览器?

发布于 2022-09-07 11:57:21 字数 1411 浏览 7 评论 0

领导要求要是用node作为中间层,去请求后端的api,node层使用了koa2(2.5.1)框架,用来向浏览器端提供接口,但在后台没开发完成的时候作为测试返回一些死数据就正常,但是当接入了后端api的时候就返回不了了,浏览器端http状态码404。硬着头皮使用node作为中间层,望大神轻喷。代码如下

// node版本8.11.2
// router使用koa-router(7.1.1)
// 有使用 koa2-cors包作为跨域的处理
// node端http请求使用request(2.87.0)
router.post('/login', async (ctx, next) => {
  console.log('方式是', ctx.request)  // 有数据
  console.log('数据是', ctx.request.body) // 有数据
  console.log('账号', ctx.request.body.name, '密码', ctx.request.body.password) // 有数据
    ctx.body = {  // 最开始为了测试,只要点用了这个login接口就会返回这个数据是正常的,后面会注释
     code: 200,
     msg: 'success'
   }
/*
* 但是当我在这个里面接入了request模块之后就出问题了
* 代码如下
*/
   request({
    url: 'http://xxx.55.41.71:9090/tokens',
    method: "POST",
    json: true,  // 照搬网上一个例子,这个true是代表什么意思?
    headers: {
      "content-type": "application/json",
    },
    body: JSON.stringify({
      'userName': ctx.request.body.name,
      'password': ctx.request.body.password
    })
  }, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body)  // 这边在控制台上是可以拿到这个body的
      ctx.body = body  // 这边就是一直返回不出去,浏览器一直报错
    }
  })
})

如图
图片描述

图片描述

如果当我浏览器调用node层需要,node层的接口需要访问三个接口,分别为A,B,C 只有当A,B C三个接口都拿到数据了才能返给浏览器(假设没有依赖关系),有没有类似于all的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

‘画卷フ 2022-09-14 11:57:21

你在requrest的回调里设置ctx.body,回调的时候请求已经返回了。

你应该用async/await,类似这样:

const request = require('request-promise-native');
const Koa = require('koa');

const app = new Koa();

app.use(async ctx => {
    let res = await request("https://www.mocky.io/v2/5185415ba171ea3a00704eed")
    ctx.body = res
});

app.listen(3000);

request有promise封装:request-promise-native

无妨# 2022-09-14 11:57:21
ctx.response.status = 200 // 加这个试试
ctx.body = {
 ... 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文