如何打开Node.js http.将消息传入Fetch Request对象



我正在尝试使用易趣API。这是一个小型的个人项目,只需要在本地运行,虽然我知道C#,但我对Javascript更熟悉,所以我正在寻找在JS中完成这项工作的方法。

我发现这个很有前途的易趣节点API支持浏览器。浏览器支持是我正在寻找的东西,但它也表明

需要代理服务器才能在浏览器中使用API。

它们为作为Cloudflare工作程序的代理服务器提供了一个示例文件。

我正试图将其转化为可以在Node中使用基本的Node HTTP服务器本地运行的东西。我一直在跟踪它,到目前为止做得还不错,找到了访问标题和检查标题的不同方法,等等,但现在我正处于代理服务器向易趣API发出代理请求的阶段。按照示例文件的设置方式,Cloudflare工作程序似乎会截获HTTP请求,并在默认情况下将其视为FetchRequest。因此,当它传递请求时,它只是在某种程度上克隆它(但用"干净的"标头替换标头(:

// "recHeaders" is an object that is _most_ of the original
// request headers, with a few cleaned out, and "fetchUrl"
// is the true intended URL to query at eBay
const newReq = new Request(event.request, {
"headers": recHeaders
});
const response = await fetch(encodeURI(fetchUrl), newReq);

问题是我没有FetchRequest可以克隆——因为我运行的是Node HTTP服务器,所以示例代码中的event.request对我来说就是http.IncomingMessage

那么,我如何将其转换为FetchRequest呢?我猜至少消息正文中有一些东西需要传递,如果不是我甚至不知道的其他属性。。。

我不介意做这项工作,即读取流以拉出主体,然后以某种方式将其放入Request对象中(或者我甚至需要这样做吗?我可以以某种方式直接将流从IncomingMessage管道传输到Request中吗?(,但除了主体之外,我还需要确保我从IncomingMessage获得什么来放入Request

如何将Nodehttp.IncomingMessage转换为FetchRequest并确保包含所有相关部分?

我做了一个简单的函数来转换。

const convertIncomingMessageToRequest = (req: ExpressRequest): Request => {
var headers = new Headers();
for (var key in req.headers) {
if (req.headers[key]) headers.append(key, req.headers[key] as string);
}
let request = new Request(req.url, {
method: req.method,
body: req.method === 'POST' ? req.body : null,
headers,
})
return request
}

最新更新