【问题标题】:Sending FormData through 2 API's (NextJS)通过 2 个 API (NextJS) 发送 FormData
【发布时间】:2021-11-09 11:27:09
【问题描述】:

所以我正在向我的后端发送一些表单数据,包括图像。为了进一步混淆/保护我的后端 - 我了解到利用 NextJS api 是一种很好的做法(将调用从客户端发送到 NextJS 服务器/api,NextJS api 充当中间人并将数据发送到后端 api)。我也在使用 Auth0 - 获取令牌的最安全方法是通过 NextJS api 本身。

当我直接从客户端向后端进行 api 调用时,我在读取后端数据时没有问题。但是,我在从 NextJS api 上的请求中获取数据(主要是图像/文件)以重新打包并发送到我的实际后端时遇到问题。我也不能在 NextJS api 中使用 FormData,所以我很困惑。

客户端提交功能:

const handleSubmit = async (e) => {
   e.preventDefault();
   const formData = new FormData();
   formData.append("title", brand.name);
   formData.append("slug", brand.slug);
   formData.append("bio", brand.bio);
   formData.append("logo", brand.logo[0]);
     const response = await fetch("/api/brands", {
       method: "post",
       body: formData,
     });
   });

NextJS api 代码(不起作用 - 我完美地获得了访问令牌,它只是发送我卡住的表单数据/文件)

import { getAccessToken, withApiAuthRequired } from "@auth0/nextjs-auth0";

export default withApiAuthRequired(async function products(req, res) {
  const { accessToken } = await getAccessToken(req, res, {});
  const response = await fetch("http://localhost:5000/brands", {
    method: "post",
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
    body: {
      title: req.body.title,
      slug: req.body.slug,
      bio: req.body.bio,
      logo: req.file,
    },
  });
  const products = await response.json();
  res.status(200);
});

【问题讨论】:

    标签: node.js reactjs upload next.js


    【解决方案1】:

    您在进行第二次 API 调用时可能缺少“Content-Type: multipart/form-data”。在客户端,它是从 FormData 对象推断出来的,但在服务器端,您必须手动指定它。无论如何,我找不到在服务器上执行此操作的方法。这可能表明用例是错误的,我认为向您自己的服务器发出另一个请求是不行的。 Next.js 旨在使用这个名为“withApiAuthRequired”的函数作为包装器,您可以从中调用您的服务或业务逻辑。此处无需进行第二次 HTTP 请求。

    【讨论】:

    • 我不明白您所说的“作为包装器”是什么意思。你是说设置一个返回令牌的 NextJS api,然后从我的客户端直接向我的后端发出请求?
    • withApiAuthRequired 是一个包装函数,它将您的操作处理程序包装在一个将为您处理身份验证的函数中。您可以像没有包装器一样编写服务器端点,但您使用此函数包装它们以进行身份​​验证。此功能将为您提供来自身份验证等的会话数据。您可以从使用“withApiAuthRequired”包装的功能中调用您的服务。像这样(你的代码在'const session'之后):auth0.github.io/nextjs-auth0/modules/…
    猜你喜欢
    • 2014-11-27
    • 2021-07-22
    • 2023-03-03
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多