提问者:小点点

解析带有express server error意外令牌的映像-在位置0处的JSON中


我正在使用express服务器作为我的微服务的API网关,我正在其中处理图像并将它们存储在数据库中。问题总结如下:在express服务器中,我需要从客户端转发在一个post请求中接收到的图像,并将其转发到可以处理图像处理的web服务。结果是,我需要在将映像转发到下一个API之前对其进行解析,我得到的错误是在JSON的位置0处出现意外的令牌

她是我的客户端,它将图像发送到express服务器(我的网关)

  function uploadWithFormData() {
    const formData = new FormData();
    formData.append("file", file);
 
fetch('/upload', {
        method: "POST",
        headers: {
            "content-type": "application/json",
                   },
        body: data
    }).then(handleResponse)
        .catch(handleError);
    uploadImage(formData);

  }

这是我的express服务,它应该处理请求并将其转发到另一个web服务


const app = express();
const bodyParser = require('body-parser');

app.post("/upload",  function (req, res) {
  let formData = new FormData();
  formData.append('file', fs.createReadStream(req.files.file.path), req.files.file.name);

  uploadImageAPI(formData).then(
    res.status(201).send()
  ).cache(res.status(412).send())
});

我曾尝试在函数内部创建一些consol.log来查看请求,但请求在进入函数之前失败,因为express无法解析图像。我看到一些人使用multer库来做这件事,但我无法管理,在我的情况下,有什么建议吗?


共1个答案

匿名用户

您正在发布FormData对象,该对象将被转换为multipart/form-data

您不会发布JSON。

您已经设置了“content-type”:“application/json”,因此您声称您正在发布JSON。

服务器尝试解码“JSON”,失败并抛出错误。

不要重写content-type头。fetch将在传递FormData对象时自动生成一个合适的对象。

请使用支持多部分请求的正文解析模块。body-parser没有,但它的文档链接到几个有此功能的文档。