【问题标题】:Node.js program exhibits image upload errorNode.js 程序显示图像上传错误
【发布时间】: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


【解决方案1】:

我认为问题出在这部分代码

    sampleFile.mv(uploadPath, function(err) {
    if (err) {
      return res.status(500).send(err);
    }

    res.send('File uploaded to ' + uploadPath);
});

如果文件上传成功,您将向客户端发送响应,但是该函数仍有更多操作,您尝试在其中尝试向客户端发送更多响应。如果成功上传时需要以下代码,则不应立即发送响应,而应使用布尔标志并在其他所有内容完成后检查它,然后才应将响应发送给客户端。

【讨论】:

  • 你也将路由标记为异步,但你从不在任何地方使用 await,这使得异步没有意义。
猜你喜欢
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多