当我从邮递员调用我的 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 };