【发布时间】:2021-12-03 05:42:58
【问题描述】:
我提出了这个帖子请求,在数据库中保存了标题、描述、解决方案和照片。除了照片,一切都是必需的。我正在尝试使图像上传工作,但我无法将照片的路径放在邮递员中,因为如果我执行C:\Users\me\Desktop 之类的操作,则会导致错误。代码有问题还是有其他方法可以解决这个问题?
router.post('/problem', catchAsync (async (req, res) => {
const { title, description, solution, photo } = req.body;
let uploadPath;
// // 1) Check if title, description and solution exist
if (!title || !description || !solution) {
res.json({
status: "FAILED",
message: "Please provide a title, description and solution!"
})
console.log("Success!");
}
photo = req.files.photo;
uploadPath = __dirname + '/uploads' + photo.name;
sampleFile.mv(uploadPath, function(err) {
if (err) {
return res.status(500).send(err);
}
res.send('File uploaded to ' + uploadPath);
});
//Save it in the database
const newProblem = new Problem({
title,
description,
solution,
photo
});
console.log(newProblem);
newProblem.save().then(result => {
res.json({
status: "SUCCESS",
message: "Success",
data: result
})
})
.catch(err => {
console.log(err);
res.json({
status: "FAILED",
message: "Error",
data: result,
})
})
我得到的错误是这样的:
错误:发送到客户端后无法设置标头
【问题讨论】:
-
如果
catch()块被触发,你会在err得到什么? -
我对Node不太熟悉,但是想知道
sampleFile.mv是不是异步的,所以需要等待? -
它是否提供任何指示您的代码的哪一部分正在尝试发送标头?如果已经发送了标头,则不能设置标头,这当然是真的 - 也许正在发送内容,这会强制发送标头?
-
我没看到。在 Postman 中,我将数据作为原始文件以 { "title": "blla blla blla", ... } 的形式发送,图像为 Body -> form-data -> KEY (File)。当我点击发送时,它说没有文字
-
我希望
res.json()发送Content-Type: application/json- 在此之前您会开始发送响应正文吗?
标签: node.js postman image-upload