gpt4 book ai didi

javascript - Node/Express/Request - 尝试使用参数代理 POST 请求抛出 "Write after end"

转载 作者:搜寻专家 更新时间:2023-11-01 00:42:18 26 4
gpt4 key购买 nike

我正在尝试将所有/api/请求从本地 Node 服务器代理到远程服务器,同时向它们嵌入一些身份验证参数。

我目前的方法似乎适用于带有查询参数的 GET 和 POST,只要我不将“form”参数提供给 Request 库,但一旦我包含它,服务器就会开始抛出错误:写在之后结束。

var express = require("express");
var request = require("request");
var parser = require("body-parser");
var strftime = require("strftime");

var app = express();
var path = require("path");
var port = 80;
var apiUrl = "http://example.com/";
var apiUser = "example";
var apiPass = "example";

app.use(express.static(path.join(__dirname, "/dist")));
app.use(parser.json());
app.use(parser.urlencoded({extended: true}));

app.get("/api/*/", function(req, res) {
console.log((strftime("%H:%M:%S") + " | GET -> " + req.url));
var url = apiUrl + req.url;
req.pipe(request.get(url, {
auth: {
user: apiUser,
pass: apiPass
}
})).pipe(res);
});

app.post("/api/*/", function(req, res) {
console.log((strftime("%H:%M:%S") + " | POST -> " + req.url));
var url = apiUrl + req.url;
req.pipe(request.post(url, {
form: req.body, // <----- RESULTS IN "write after end" error
auth: {
user: apiUser,
pass: apiPass
}
})).pipe(res);
});

app.listen(port);
console.log("Development server started, listening to localhost:" + port);
console.log("Proxying /api/* -> " + apiUrl + "/api/*");

这可能与 body-parser 中间件有关,但我找不到解决此问题的方法,而且我不太明白为什么“form: req.body”会破坏脚本。记录 req.body 似乎输出了预期的参数。

我也尝试过使用 .form(req.body) 的替代链接语法,但结果是一样的。

最佳答案

这是几个月前的事了,所以 OP 可能已经继续了,但我只是遇到了这个问题,我想我会为 future 的搜索者发布我的解决方案。问题是请求编写器在读取器结束时结束,因此正文无法写入(并抛出“结束后写入”)。所以我们需要告诉它不要结束。传递主体时,需要将 { end : false } 添加到管道选项中。例如:

app.post("/api/*/", function(req, res) {
console.log((strftime("%H:%M:%S") + " | POST -> " + req.url));
var url = apiUrl + req.url;
req.pipe(request.post(url, {
form: req.body,
auth: {
user: apiUser,
pass: apiPass
}
}), { end : false }).pipe(res);
});

关于javascript - Node/Express/Request - 尝试使用参数代理 POST 请求抛出 "Write after end",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30436530/

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