【发布时间】:2021-11-01 22:34:31
【问题描述】:
我有一个 Express 服务器,用作 API 请求转发工具(即我的客户端调用 express 服务器,然后 express 服务器将该调用转发到另一个 API)。
这个服务器的工作方式应该是有一个单一的入口点发出请求,然后根据响应发出进一步的 API 请求,并根据 API 请求响应的组合返回结果。
为了更清楚,主要逻辑如下:
- 单一入口点,通过异步 axios 调用获取 ID 值
- 在这个函数中,我们调用了一个异步函数,
getPartnerDetails(将该 ID 作为参数传递) -
getPartnerDetails调用第 3 个异步函数 '''getRawJson''',它应该返回最终所需的结果,将其传递回 '''getPartnerDetails''',然后将其传递到主入口点。
出了什么问题是结果被接收但没有被正确地传回。我的异步函数的 '''.then(()=>{})''' 中的控制台日志返回为 '''undefined'''。
代码如下:
app.post('/checkuser', async (req, res, next) => {
const { man, bfn, bln, bsn, bc, bs, bz, bco } = req.body;
const bodyContent = {
man: man,
bfn: bfn,
bln: bln,
bsn: bsn,
bc: bc,
bs: bs,
bz: bz,
bco: bco,
profile: 'DEFAULT',
};
try {
await axios
.post('https://host.com/im/account/consumer', bodyContent, { headers })
.then((response) => {
const addressValidResult = response.data.score.etr.filter(
(result) => result.test === '19:2'
)[0];
// console.log(res.json(result.details));
const requestId = response.data.mtid;
const currentValidAddress = getPartnerDetails(requestId).then(
(result) => {
console.log('this is currentvalidaddress ' + result);
res.json({
validationMessage: addressValidResult,
currentValidAddress: result,
});
}
);
})
.catch((err) => next(err));
} catch {}
});
async function getPartnerDetails(appId) {
let config = {
headers: {
'Content-Type': 'application/json',
Authorization: 'Basic M2QzMsdfsslkfglkdjfglkdjflkgd',
},
params: {
partner: 19,
},
};
const res = await axios
.get(
`https://host.com/im/account/consumer/${appId}/partner/requests`,
config
)
.then((response) => {
const requestId = response.data.requests[0].request_id;
console.log('this is request id ' + JSON.stringify(requestId));
const raw = getRawJson(appId, requestId).then((result) => {
console.log('this is getRawJson result ' + JSON.stringify(result));
return JSON.stringify(result);
});
// https://host.com/im/account/consumer/:appId/partner/request/:requestId
})
.catch((err) => console.log('err2' + err));
}
async function getRawJson(appId, requestId) {
const res = await axios
.get(`host.com/im/account/consumer/${appId}/partner/request/${requestId}`, {
headers,
})
.then((response) => {
console.log('this is response ' + JSON.stringify(response.data));
return JSON.stringify(response.data);
})
.catch((err) => console.log('err1 ' + err));
}
这可能与我使用 async 和 await 的方式有关,我是新手,所以我希望通过解决这个项目我能学到一两点。
我也知道,也许我应该将入口点分成 3 个不同的入口点,并让客户端管理请求和响应的链接。
谢谢!!
【问题讨论】: