网站搜索

node.js - NodeJs 使用 Express 无法解析来自 node-fetch 的表单数据


我正在使用 NodeJS、Express 和 TypeScript 创建两个 API。一个 API 将接收内容类型为 multipart/form-data 的请求,并将使用请求中的正文向第二个 API 发起另一个请求。

我正在使用 Postman,所以请求链大致如下

Postman -> First API -> Second API

我使用 node-fetch 从第一个 API 向第二个 API 发起请求。请求的主体是一个 FormData,其中包含一些文件和键值对。

    const form = new FormData();
    
    // File for profile picture
    const profilePictureBuffer = await (await fetch(user.profilePicture)).buffer();
    form.append('profilePicture', profilePictureBuffer);

    // File for ID Card
    const idCardBuffer = await (await fetch(user.idCardUrl)).buffer();
    form.append('idCard', idCardBuffer);


    // This part iterats over the obsect of 'user',
    // which contains other key-value pairs
    Object.entries(user).forEach((data) => {
        form.append(data[0], data[1]);
    });

    // Make POST request to second API
    const pinterUser = await fetch(secondAPIURL, {
        method: 'post',
        body: form,
        headers: form.getHeaders()
    });

我在本地主机上运行了两个 API,以便可以监控日志中的任何错误。当我从 Postman 向第一个 API 发出请求,然后第一个 API 向第二个 API 发出另一个请求时,我在第二个 API 的终端中收到了以下错误日志

TypeError: Cannot read property '0' of undefined

经过一些调查,我发现,在第二个 API 中,req.body 和 req.files 是空对象。这意味着 Express 没有解析传入的请求。请注意,我已经有一个 multer 中间件来处理请求中的文件。

此外,我在我的 server.ts 文件中为第二个 API 添加了以下代码行

/** Parse the body of the request */
router.use(express.urlencoded({ extended: true }));
router.use(express.json());

然而,当我尝试从 Postman 发起请求时,它返回了一个成功的响应。

我不太确定这里发生了什么。我试着找一些关于类似问题的答案,但大多数建议添加urlencoded和json,或者使用其他库来处理表单数据的解析。

在我的情况下,第一个建议不能解决我的问题,因为我从一开始就已经添加了它们,而后者正是我试图避免的。

我想知道是否有人可以指出我在这里遗漏了什么?提前感谢