next.js 如何修复在nodejs中发送formdata到API时的错误请求?

3bygqnnd  于 2023-01-25  发布在  其他
关注(0)|答案(1)|浏览(214)

我正在使用useform获取要上传的文件和其他信息。我将收到的信息记录到屏幕上,它不会出现null或未定义。它似乎工作正常。但我无法发送到api端。我得到500错误或400错误。
前端:

//index.js
function uploadFile(form) {

    const { email, description, files } = form;
    const formData = new FormData();
    Array.from(files).forEach((file) => {
        formData.append(file.name, file);
    });
   formData.append("email", email);
   formData.append("token", token)

   for (var key of formData.entries()) {
       console.log(key[0] + ", " + key[1]);
   }

   dispatch(uploadChallengeThunk(formData));

}
//service.js
export async function uploadChallengeService(formData) {
  Array.from(formData).forEach((item) => {
    console.log("🚀 ~ file: index.js:5 ~ Array.from ~ item", item);
  });
  return await api.post("/challenges/upload", formData);
}

后端:

export const config = {
  api: {
    bodyParser: false,
  },
};

const formidableConfig = {
  multiples: true,
  allowEmptyFiles: false,
  maxFileSize: 5 * 1024 * 1024,
  keepExtensions: true,
  filename: (name, ext, part, form) => {
    return part.originalFilename;
  },
};

function parseRequest(req) {
console.log("not coming here");
  return new Promise((resolve, reject) => {
    const form = new formidable.IncomingForm(formidableConfig);

    form.parse(req, (error, fields, files) => {
      if (error) {
        alert("not working");
        console.log("not coming here");
        reject(new BusinessError(error.message, error.httpCode));
      }

      resolve({ files, fields });
    });
  });
}

async function postChallengesUpload(req, res) {
console.log("not coming here");
  const { files, fields } = await parseRequest(req);
}

export default apiHandler({
  POST: postChallengesUpload,
});
klsxnrf1

klsxnrf11#

你的apiHandler没有像你期望的那样工作,这是你的核心问题。你得到500和400的事实是一个好兆头,表明你实际上是在向后端发送请求。
当你得到500分时,你通常会导致一个错误,你没有正确地捕捉到它,它冒泡了太多。通常称为内部服务器错误。
当你发送错误的东西,太小,太大,等等,你通常会得到400。
好的一面是你不会得到404.
你需要检查你的apiHandler并确保你设置的正确。你的服务器正在返回状态码,也就是响应,但是你的apiHandler并没有按照你想要的方式运行。

相关问题