Я пытаюсь прокси нашего основного сервера через сервер node.js / express. js. У меня все работает как надо, кроме загрузки файлов. Файлы загружаются и достигают сервера, однако где-то между данными, передаваемыми в запрос node.js, и данными, поступающими на сервер, файл поврежден.
Файл с длиной содержимого 1833 в конечном итоге имеет содержимое длина 3274, как только он достигает сервера. Я ожидаю, что файл, который достигает сервера, останется в 1833. Работа без прокси работает как ожидалось.
Это конечная точка POST прокси
router.post("*", wrapAsync(async (req: any, res: any) => {
const path = ROOT_PATH + req.originalUrl;
logger.info("Proxy request to: POST " + path);
const headers = JSON.parse(JSON.stringify(req.headers)); // create a copy of headers
delete headers["content-length"]; // Without this node.js requests will set the content-length to null
if (req.session.auth) {
headers.Authorization = req.session.auth.Token;
}
const options = {
agentOptions,
body: req.rawBody,
encoding: null as any,
headers,
json: false,
resolveWithFullResponse: true,
url: path
};
const result = await request.post(options);
handleJSONResponse(result, res);
}));
Значение для req.rawBody создано в следующем небольшом промежуточном программном обеспечении:
app.use("/rest/api", (req: any, res, next) => {
// This is a special piece of proxy middleware that provides the raw buffer
req.rawBody = "";
req.setEncoding("utf8");
req.on("data", (chunk: any) => {
req.rawBody += chunk;
});
req.on("end", () => {
next();
});
}, proxyRouter);
Это либо что-то в промежуточном программном обеспечении, либо что-то в запросе node.js (либо ошибка, либо что-то в том, как я его настроил), которое, кажется, вызывает проблему , Для меня возможно обрабатывать файлы в отдельной конечной точке, пока она получает POST: ed к той же конечной точке на сервере (ie, это не должно быть напрямую прокси, у меня есть контроль, какие URL использует интерфейс )