训练自己了解 Multer 如何与 React 一起工作。这是 multer-config.js :
const multer = require("multer");
const MIME_TYPES = {
"image/jpg": "jpg",
"image/jpeg": "jpg",
"image/png": "png",
};
const storage = multer.diskStorage({
destination: (req, file, callback) => {
console.log("oui");
callback(null, "images");
},
filename: (req, file, callback) => {
const name = file.originalname.split(" ").join("_");
const extension = MIME_TYPES[file.mimetype];
callback(null, name + Date.now() + "." + extension);
},
});
const errorHandler = (err, req, res, next) => {
console.error(err.stack);
res.status(500).send("Something went wrong!");
};
module.exports = multer({ storage: storage }).single("image");
这是控制器:
exports.createCommInfos = (req, res, next) => {
const infosObject = req.body;
const infos = new CommInfos({
...infosObject,
imageUrl: `${req.protocol}://${req.get("host")}/images/${
req.body.picture.path
}`,
});
infos
.save()
.then(() => {
res.status(201).json({ message: " Infos enregistré !" + infos });
})
.catch((error) => {
res.status(400).json({ error });
});
};
这是我用来发布的功能:
export async function postCommInfos(e, body, setCommPayment, setCommForm) {
e.preventDefault(e);
if (validForm(body)) {
console.log(body)
try {
await fetch("http://localhost:8000/bioanimale/comminfos", {
method: "POST",
headers: {
"Content-Type": "application/json;charset=utf-8",
},
body: JSON.stringify(body),
});
setCommPayment(true)
setCommForm(false)
} catch (e) {
console.log(e);
}
}
}
当我使用 POST 路由时,我的数据库成功接收了我的数据,但是 Multer 应该将图像保存在后端/图像中,但它不起作用。当我使用 POST 时,console.log(在控制器和 multer-config.js 中)根本没有出现。
router.post("/cominfos", multer, infosCtrl.createComInfos);
router.post("/recinfos", multer, infosCtrl.createRecInfos);
router.post("/orainfos", multer, infosCtrl.createOraInfos);