我需要从节点API调用外部API。 为此,我使用https://github.com/request/request-promise-native
可行的示例路线:
df <- data.frame(id = 1:3, code = c("STWX", "STVX", "RTUX"))
str_convert <- function(x) {
str_replace_all(x, 'T', ' ') %>%
str_sub(1, -2)
}
df %>%
mutate(code = str_convert(code))
id code code
1 1 STWX S W
2 2 STVX S V
3 3 RTUX R U
问题是我不想打这条路线。在创建方法之后,应该在另一个路由器中调用update方法:
router.get('/update/:id/:value', async (req, res) => {
const result = await updateMethod(req.params.id, req.params.value);
res.status(200);
res.json(result);
});
所以我在mongo中插入了一些数据,我在外部API中(在createMethod内部)发布了一些数据,最后我将一些数据更新/放置到了外部API中。
两个POST都可以,但是PUT失败并显示:
{RequestError:错误:写入EPROTO 101057795:error:1408E0F4:SSL 例程:ssl3_get_message:意外消息:openssl \ ssl \ s3_both.c:408
{方法:“ PUT”, uri:'https://externalAPI.com/v1/id/123/value/321', rejectUnauthorized:假, 标头: {'x-api-key':'xyz', 'app-user-id':'me'}, json:是,
问题是,如果我手动调用路由router.post('/create', (req, res, next) => {
mongo.create(data, async (e, createdEntity) => {
const saved = await createMethod(someObject);
const updated = await updateMethod(id, value);
res.status(200);
res.json(createdEntity);
return res;
}
});
而不是/update/:id/:value
的方法,则完全相同的PUT方法可以工作
这似乎与更新方法的实现方式无关,因为它在第一条路线中起作用:
/create
我还尝试使用res.redirect重定向到更新路由,但它返回与上述相同的错误。手动调用更新路由可以按预期工作,并且外部API已更新。
答案 0 :(得分:0)
您绝对可以在Node中链接两个请求,据我所知,您的代码应该可以工作。
您发布的错误消息与SSL有关-节点由于某种原因无法与外部API服务器安全通信。这就是您需要解决的问题。如果外部服务允许,也可以尝试使用HTTP代替HTTPS。