【发布时间】:2020-11-21 11:52:15
【问题描述】:
我正在 Express.js 中创建一个 REST API 服务器。我的特定问题的目标是创建一个接受多部分/表单数据请求并将文件/文本/字段发送到外部 API 的发布路由。目前我遇到了一个问题,甚至尝试使用邮递员进行测试。
我可以使用 multer 的解析数据发送响应,但是当我尝试创建新的表单数据时,我无法访问请求正文,TypeError: Cannot read property 'name' of null
我做错了什么?有没有更好的办法?接受建议。
我的服务器代码如下:
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const request = require("request");
const multer = require("multer");
const upload = multer({ dest: 'uploads/'});
const FormData = require("form-data");
const fs = require("fs");
const app = express();
const port = 3000;
app.use(cors());
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
///.....
app.post('/jobs/:id', upload.single('resume'), (req, res) => {
let url = '...';
var header = req.headers['content-type']
var tmp_path = req.file.path;
var tar_path = 'uploads/' + req.file.originalname;
var src = fs.createReadStream(tmp_path);
var dest = fs.createWriteStream(tar_path);
src.pipe(dest);
var data = new FormData();
data.append('name', req.body.name)
data.append('phone', req.body.phone)
data.append('email', req.body.email)
data.append('resume', fs.createReadStream(tar_path))
const options = {
url: url,
method: 'POST',
headers:{
'Content-Type': header
},
formData: data
}
request(options, (err, rez, body) => {
if (err){
console.log("There was an error: " + err)
}
}).pipe(res)
res.send(res)
})
app.listen(port, () => console.log(`Server is listening on port ${port}`));
编辑
这是我要提出的要求:
curl -F name="test" -F phone="0000000000" -F email="test@test.com" -F resume=@"Desktop/test.txt" http://cfr.thewb.co/jobs/408189/
【问题讨论】:
-
你能添加你想要做的实际请求吗?也许是
curl? -
@eol 我用请求编辑了初始帖子
-
我猜这个问题来自于同时混合 body-parser 和 multer,但我还没有测试过。如果您删除正文解析器,它会起作用吗? Multer 应该返回基于文本的表单数据。
-
@glmdev 似乎没有什么不同。
-
尝试用“upload.any()”替换“upload.single('...')”。我相信当你设置单一时,multer 只做文件字段,而不是文本字段。
标签: node.js express multipartform-data multer