node.js - 从邮递员发送 application/x-www-form-urlencoded 时读取 req.body 内容时发出问题——bodyparser 已使用
问题描述
正如标题所说。我正在从邮递员发送带有一些文本字段和图像的多部分表单数据。但是,当我 console.log(req.body) 我得到
{
'------WebKitFormBoundaryCpNHg1P01X54QAVr\r\nContent-Disposition: form-data; name': '"customerID"\r\n' +
'\r\n' +
'1\r\n' +
'------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
'Content-Disposition: form-data; name="make"\r\n' +
'\r\n' +
'honda\r\n' +
'------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
'Content-Disposition: form-data; name="model"\r\n' +
'\r\n' +
'accord\r\n' +
'------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
'Content-Disposition: form-data; name="year"\r\n' +
'\r\n' +
'2020\r\n' +
'------WebKitFormBoundaryCpNHg1P01X54QAVr\r\n' +
'Content-Disposition: form-data; name="color"\r\n' +
'\r\n' +
'white\r\n' +
'------WebKitFormBoundaryCpNHg1P01X54QAVr--\r\n'
}
如果我 console.log(req.body.keyName) 我总是有未定义的。我已经实现了类似帖子的建议,即使用
app.use(bodyParser.urlencoded({
extended: true
}));
但它仍然不起作用。我不确定我做错了什么。代码片段如下。
服务器.js
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(cors());
app.use('/users', userRouter);
app.use('/offers', offerRouter);
app.listen(PORT, (err)=>
{
if (err) console.log(err);
else console.log(`Server listening on port ${PORT}`);
});
路线
const multer = require('multer');
//required for mulitpart-formdata
const diskStorage = multer.diskStorage({
destination: "uploads/",
filename: (req, file, call_back) => {
//Prepend date to the filename or anything that makes
//the file unique so it won't be overwritten
call_back(null, Date.now() + "_" + file.originalname);
},
});
const upload = multer({ storage: diskStorage });
router.post("/request", upload.single("file"), (req, res, next) =>
{
GetBucket();
console.log(req.file);
})
解决方案
要解析多部分请求,您需要 Multer 或 BusyBoy。我建议 Multer ( https://www.npmjs.com/package/multer ) 因为它简单易用,这里是一个使用 Multer 的例子
const Multer = require('multer');
// create multer instance
const multer = Multer({
storage: Multer.MemoryStorage, // we want to save parsed body in RAM
onError: function(err, next) {
console.log(err);
next(err);
}
});
function myController("/multipart/request", multer.single('name'), (req, res) => {
console.log(req.body.name);
});
注意:如果您将文件与您的请求一起发送,请使用多部分请求,否则您可以使用application/x-www-form-urlencoded
or application/json
which can be parsed by body parser
推荐阅读
- python - 无法安装 webrtcvad
- google-apps-script - 如何自动链接 Google 表单提交
- postgresql - 从表中选择列值与数组中的任何项目匹配的行
- python - 使用 Pandas 读取列数不规则的 CSV 文件
- jquery - 使用 jQuery 从 href 值中删除特定文本的正确方法
- python - 用户输入时如何从输出中排除“0”?
- mysql - 尝试调用 CTN 并将查询存储在变量中时出现“表不存在”错误
- ruby-on-rails - HAML Bootstrap 4 和 rails - 基于局部变量扩展手风琴
- c++ - 函数引用/初始化程序不起作用,它可能是什么?
- regex - MatchCollection 结果不一致