如何在NodeJS中将多部分请求从一个服务器传递到另一个服务器?

9
我有两个NodeJS服务器,服务器1接收客户端的请求并将其传递给服务器2,后者返回响应到服务器1并响应客户端。客户端上传文件,必须像其他任何rest请求一样传递。 我在服务器1上使用axios将数据发送到服务器2,在服务器2上使用multer将文件存储在磁盘上。 我有一个问题,即从服务器1向服务器2发送请求时,请求的主体不包含任何内容,并且该请求是多部分的。 enter image description here 我应该如何处理服务器1上的请求?
router.post('/fileUpload', (req, res) => {
    console.log(req.body);
    res.status(200).json({ msg: "Got file" });
});
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
25

您可以使用form-data模块从Node.js应用程序发送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处理上传的文件


1
非常有帮助!为了简洁起见,使用:await axios.post('http://server2url/fileUploadToServer2', form, { headers: form.getHeaders() }) - MiKK

1
 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。

我在使用FormData发送res.file时遇到了问题,它会发送请求但没有文件。有没有实际的例子可以完成这个任务?我能够使用fs.createReadStream从服务器1上的磁盘读取文件并成功发送。 - Pini Cheyni
如果您能够从磁盘读取文件,则将该文件附加到formData中。 - Nandkishor Shinde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,