如何在 NodeJS 中将多部分请求从一个服务器传递到另一个服务器?
How to pass multipart request from one server to another in NodeJS?
我有两个 nodeJS 服务器,
服务器 1 从客户端获取请求并将其传递给服务器 2,服务器 2 returns 响应服务器 1 并响应客户端。
客户端上传一个文件,它必须以与我拥有的任何其他休息请求相同的方式传递。
我在服务器 1 上使用 axios 将数据发送到服务器 2,并在服务器 2 上使用 multer 将文件存储在磁盘上。
我在将请求从服务器 1 发送到服务器 2 时遇到问题,因为请求正文不包含任何内容并且请求是 Multipart。
我应该如何处理服务器 1 上的请求???
router.post('/fileUpload', (req, res) => {
console.log(req.body);
res.status(200).json({ msg: "Got file" });
});
const formData = new FormData();
formData.append('query', updateDocQuery);
formData.append('variables', JSON.stringify(this.setUpdateDocParams() || {}));
for (let i = 0; i < fileArr.length; i++) {
formData.append(`file${i}`, fileArr[i])
}
您可以将查询变量和文件附加到 formData 并将 formData 传递给 body
您可以使用 form-data
模块从 nodejs 应用程序发送 multipart/form-data
这是您可以在 Server1 上实现的代码,用于从客户端接收图像文件并将其发送到 Server2。
const express = require("express");
const app = express();
const bodyParser = require('body-parser');
var multer = require('multer')();
const FormData = require('form-data');
const axios = require('axios');
const fs = require('fs');
app.use(bodyParser.json());
app.post('/fileUpload' , multer.single('fileFieldName'), (req , res) => {
const fileRecievedFromClient = req.file; //File Object sent in 'fileFieldName' field in multipart/form-data
console.log(req.file)
let form = new FormData();
form.append('fileFieldName', fileRecievedFromClient.buffer, fileRecievedFromClient.originalname);
axios.post('http://server2url/fileUploadToServer2', form, {
headers: {
'Content-Type': `multipart/form-data; boundary=${form._boundary}`
}
}).then((responseFromServer2) => {
res.send("SUCCESS")
}).catch((err) => {
res.send("ERROR")
})
})
const server = app.listen(3000, function () {
console.log('Server listening on port 3000');
});
这里multer
用来处理上传的文件
我有两个 nodeJS 服务器, 服务器 1 从客户端获取请求并将其传递给服务器 2,服务器 2 returns 响应服务器 1 并响应客户端。 客户端上传一个文件,它必须以与我拥有的任何其他休息请求相同的方式传递。
我在服务器 1 上使用 axios 将数据发送到服务器 2,并在服务器 2 上使用 multer 将文件存储在磁盘上。
我在将请求从服务器 1 发送到服务器 2 时遇到问题,因为请求正文不包含任何内容并且请求是 Multipart。
我应该如何处理服务器 1 上的请求???
router.post('/fileUpload', (req, res) => {
console.log(req.body);
res.status(200).json({ msg: "Got file" });
});
const formData = new FormData();
formData.append('query', updateDocQuery);
formData.append('variables', JSON.stringify(this.setUpdateDocParams() || {}));
for (let i = 0; i < fileArr.length; i++) {
formData.append(`file${i}`, fileArr[i])
}
您可以将查询变量和文件附加到 formData 并将 formData 传递给 body
您可以使用 form-data
模块从 nodejs 应用程序发送 multipart/form-data
这是您可以在 Server1 上实现的代码,用于从客户端接收图像文件并将其发送到 Server2。
const express = require("express");
const app = express();
const bodyParser = require('body-parser');
var multer = require('multer')();
const FormData = require('form-data');
const axios = require('axios');
const fs = require('fs');
app.use(bodyParser.json());
app.post('/fileUpload' , multer.single('fileFieldName'), (req , res) => {
const fileRecievedFromClient = req.file; //File Object sent in 'fileFieldName' field in multipart/form-data
console.log(req.file)
let form = new FormData();
form.append('fileFieldName', fileRecievedFromClient.buffer, fileRecievedFromClient.originalname);
axios.post('http://server2url/fileUploadToServer2', form, {
headers: {
'Content-Type': `multipart/form-data; boundary=${form._boundary}`
}
}).then((responseFromServer2) => {
res.send("SUCCESS")
}).catch((err) => {
res.send("ERROR")
})
})
const server = app.listen(3000, function () {
console.log('Server listening on port 3000');
});
这里multer
用来处理上传的文件