问题描述
背景:
我有一个当前的Express.js API,可以接受GET请求。
然后,控制器方法必须接受该请求并构造一个JSON对象,然后将其发布到另一个完全外部的API。然后,它必须从那个外部API获得响应,然后以其自己响应进行通信。
当前代码:
const request = require("request");
exports.requestForExternalInfo = asyncHandler(async (req,res,next) => {
// this is the JSON I want to include in the call to an external API:
let externalPostType = {
"carInfo": {
"InfoType": "VIN"
}
};
request.post("https://externaldomain.com/api/v1/carinforequest",externalPostType,(error,response,body) => {
const res = JSON.parse(body)
});
res.status(200).json({
success: true,data: res,});
});
问题:
Express.js是否可以处理此问题?我不知道我当前使用的“请求”包是否是正确的解决方案。
更新:
我可以使用邮递员生成的呼叫解决此问题。事实证明,Postman将为您提供独立调用另一个API所需的确切语法。 (只要您在Postman中构造了独立的API调用,并使其与所有必要的标头和正文一起使用即可。)
这是解决问题的简单方法;否则,如果您想探索另一个可能的答案,则可以尝试以下Rahul Pal的答案。我会把他标记为首选解决方案,但是老实说,我觉得更简单的方法是尝试使用Postman提供的语法。
邮递员解决方案:
在Postman工具中(如果尚未安装,则必须独立安装和使用-这是一个非常常见的API测试工具):
-
转到“代码”(在2020年的最新版本中,直接在“保存”按钮下)
-
选择“ Nodejs-Axios”
-
复制代码并将其粘贴到适当的位置
-
确保也导入Axios
const axios = require(“ axios”);
希望这种捷径可以帮助其他人,因为得益于Postman的开发人员,因为它确实为我所需要的提供了快速的解决方案。
解决方法
您可以在外部API请求完成后将响应发送回您自己的服务器 您可以在请求包的回调处理程序中调用res.send。
exports.requestForExternalInfo = asyncHandler(async(req,res) => {
let externalPostType = {
"carInfo": {
"InfoType": "VIN"
}
};
request.post("https://externaldomain.com/api/v1/carinforequest",externalPostType,(error,response,body) => {
let res = JSON.parse(body)
/* send the response to you server from inside this request callback handler */
res.status(200).json({
success: true,data: res,});
});
});