当我从 Postman 以表单数据形式发送数据时,我收到空的 req.body

问题描述 投票:0回答:0

当我从邮递员调用我的 api 时,请求中的 req.body 是空的。有一种解决方案是使用 multer 中间件,但如果我使用 multermiddleware,它会立即上传文件。但是我想在我的api函数中进行一些操作后上传。

我不知道该如何处理。请在下面查看我的代码。

我的Api是

router.post("/update_profile", jwtMiddleware, async (req, res) => {
  const { error } = updateProfileValidator(req.body);

  if(error){
    return res.status(400).send({
      error: error.details[0].message,
    });
  }



  if(req.body.userImage){
    const fileUrl = await uploadFile(`${req.user.id}/profile`, req.body.userImage);
    req.body.userImage = fileUrl;
  }

  const { firstName, lastName, gender, dob, userImage } = req.body;


  const updatedUser = await updateProfile(req.user.id, firstName, lastName, gender, dob, userImage);

  return res.send({
    message: "Profile updated successfully",
    user: updatedUser,
  });

});

上传文件用例:

const { getUploader } = require("../../../helpers/uploader");

async function uploadFile(destination, file) {
    const upload = getUploader(destination);

    return new Promise((resolve, reject) => {
      upload.single("image")(file, null, (err) => {
        if (err) {
          reject(err);
        } else {
          const filePath = `uploads/${destination}/${file.filename}`;
          const host = process.env.APP_URL;
          const fileUrl = `${host}/${filePath}`;
          resolve(fileUrl);
        }
      });
    });
}


module.exports = {uploadFile};

获取上传者:

const multer = require("multer");
const path = require("path");

function getUploader(destination, callback) {
  const storage = multer.diskStorage({
    destination: `uploads/${destination}`,
    filename: function (req, file, cb) {
      //Set file name with extension
      const fileName = Date.now() + path.extname(file.originalname);

      //Set file path
      const filePath =  `uploads/${destination}/${fileName}`;

      //Set file path in request
      req.file = {
        originalname: file.originalname,
        filename: fileName,
        path: filePath,
      };

      return cb(null, fileName);
    },
  });

  const upload = multer({ storage: storage, fileFilter: callback });
  return upload;
}

module.exports = { getUploader };
node.js multipartform-data multer form-data
© www.soinside.com 2019 - 2024. All rights reserved.