node中间层请求后端的服务,request-promise-native模块为何await拿不到数据
硬着头皮用node做中间层请求服务端,大神请轻喷。项目情况如下:
- node版本8.11.2,使用了koa2版本2.5.1
- 因为需要用node服务器去请求后端的api,所以使用了request模块
- 使用了koa2-cors包(2.0.5)作为跨域的处理
- 使用了koa-router(7.1.1)
// 假设这边有一个login的接口
const request = require('request')
router.post('/login', async (ctx, next) => {
ctx.body = { // 可以给浏览器返回对应的数据,在自己独立开发的时候没有任何问题
code: 200,
msg: 'success'
}
})
// 当需要连调的时候就出问题了
router.post('/login', async (ctx, next) => {
// 一些校验之类的方法
// 在这里面需要调用后端的api了 ,例如
request({
url: 'http://xx.55.41.71:9090/tokens',
method: "POST",
json: true,
headers: {
"content-type": "application/json",
},
body: JSON.stringify({
'userName': 'xxxxxx',
'password': 'xxxxxx'
})
}, function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // 在这里可以拿到服务器的返回值
ctx.body = body // 但这样给浏览器返回数据就会出错,在大神的指点下使用 request-promise-native
}
})
})
关于上面的这个,想看详细的信息可以参考链接
问题描述
//现在将request模块替换为request-promise-native
// const request = require('request') // 注释掉request
// 但是我看request-promise-native的npm需要install requese --save
// demo例子却没有require('requese') 那又为何要npm install requese --save 呢?
const request = require('request-promise-native')
// 将代码改为如下
let res = await request({
url: 'http://120.55.41.71:9090/tokens',
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify({
'userName': ctx.request.body.name,
'password': ctx.request.body.password
})
})
ctx.body = res
node 报错如下
因为时间比较晚,我暂时不能确定后端的错误导致了我的错误(因为刚用postman调用发现有点问题但又不能确定),所以感觉是我node弄错了
希望来个大神说下是什么错误?最好能给一个request-promise-native的demo例子,看github的官方文档,英文看的一知半解。看官方还有request-promise(貌似需要一个其他的插件支持下)request-promise-native(原生实现,可以不用)request-promise-any(貌似也需要一个支持)。这几个哪个好用?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
自己基于promise封装一下就行了,不用什么都依赖于第三方包。
或者更简单一点,直接用原生的 promisify :