领导要求要是用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的方法?
你在requrest的回调里设置ctx.body,回调的时候请求已经返回了。
你应该用async/await,类似这样:
request有promise封装:request-promise-native。