gpt4 book ai didi

javascript - 如何将一个 POST 请求转发到两个外部 url?

转载 作者:可可西里 更新时间:2023-11-01 17:26:27 28 4
gpt4 key购买 nike

我们使用的一个 SaaS 提供商有一个 webbook 字段,但只允许输入一个 url。事实上,我们需要将此 webhook 发送到两个分析服务,因此我需要想出一种方法来编写一个自定义端点,将整个请求转发到我们需要的任意多个其他端点(目前为 2 个)。

使用 node 和 express 执行此操作的最简单方法是什么?如果我没记错的话,一个简单的重定向不会对多个 POST 起作用,对吧?

我不确定 header 甚至请求内容会是什么样子,但需要尽可能多地保留它,以防在 header 等中出现 auth。

这是我目前所拥有的,但还远未完成:

app.post('/', (req, res) => {
console.log('Request received: ', req.originalUrl)
const forwardRequests = config.forwardTo.map(url => {
return new Promise((resolve, reject) => {
superagent
.post(url)
.send(req)
.end((endpointError, endpointResponse) => {
if (endpointError) {
console.error(`Received error from forwardTo endpoint (${url}): `, endpointError)
reject(endpointError)
} else {
resolve(endpointResponse)
}
})
})
})
Promise.all(forwardRequests)
.then(() => res.sendStatus(200))
.catch(() => res.sendStatus(500))
})

我得到一个错误,因为 superagent.send 只是为了内容...我如何完全复制一个请求并将其发送

最佳答案

完全复制一个请求并将其发送到不同的端点,您可以使用request模块与 req.pipe(request(<url>))Promise.all .

根据请求模块的文档:

You can also pipe() from http.ServerRequest instances, as well as to http.ServerResponse instances. The HTTP method, headers, and entity-body data will be sent.

这是一个例子:

const { Writable } = require('stream');
const forwardToURLs = ['http://...','http://...'];
app.post('/test', function(req, res) {
let forwardPromiseArray = [];
for (let url of forwardToURLs) {
let data = '';
let stream = new Writable({
write: function(chunk, encoding, next) {
data += chunk;
next();
}
});
let promise = new Promise(function(resolve, reject) {
stream.on('finish', function() {
resolve(data);
});
stream.on('error', function(e) {
reject(e);
});
});
forwardPromiseArray.push(promise);
req.pipe(request(url)).pipe(stream);
}

Promise.all(forwardPromiseArray).then(function(result) {
// result from various endpoint, you can process it and return a user-friendly result.
res.json(result);
}).catch(function() {
res.sendStatus(500);
});
});

请注意上面的代码应该放在body-parser之前(如果您正在使用它)。否则,将不会通过管道传输请求。

关于javascript - 如何将一个 POST 请求转发到两个外部 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45911358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com