我想将数据从客户端传输到服务器计算机,而这两个计算机都使用Node.js
。在客户端上,我正在使用库axios
和form-data
。在服务器上,我正在使用express
和multer
...
我正在使用的客户端代码如下:
const FormData = require('form-data');
const axios = require('axios');
let form = new FormData();
form.append("user","someuser");
axios({
method: 'post',url: 'http://localhost:9996/data',data: form
})
.then(function (response) {
console.log(response.status);
})
.catch(function (response) {
console.log(response.status);
});
服务器代码如下:
const express = require('express')
const bodyParser = require('body-parser');
const multer = require('multer')
const app = express();
const upload = multer();
app.use(bodyParser.urlencoded({extended: true}));
app.post('/data',upload.none(),function (req,res,next) {
console.log(req.body);
res.sendStatus(200)
})
const port = 9996;
app.listen(port,() => {
console.log(`running on port ${port}`)
})
.on('error',function(err) {
console.log('stopped')
})
此代码可以正常工作,我设法获取在客户端上创建的form
JSON
作为服务器上的请求消息。但是,我的req.body
在服务器上的输出如下:
{ '----------------------------926328179431047129531240\r\nContent-Disposition: form-data; name':
'"user"\r\n\r\nsomeuser\r\n----------------------------926328179431047129531240--\r\n' }
此输出未按我期望的那样格式化为JSON对象。 upload.none()
中的参数multer
是否应该将req.body
解析为JSON? 有人知道我在这里出了什么问题吗?是否需要更改其他任何参数才能将req.body上的输出格式化为JSON对象?
观察:我知道,如果我使用const form = {"user":"someuser"}
手动创建此JSON,我将把输出作为对象放在服务器上的req.body
上。但是,我使用form-data
是因为我打算在原始代码中读取客户端上带有createReadStream
的大文件,并在服务器上与createWriteStream
和库{{ 1}}是我发现使form-data
支持数据流传输的解决方案。