当试图将注册表保存到MongoDB中时,node不会保存它,除非选择了图像。我希望此参数是可选的,而不是必需的。
router.post("/", upload.single("image"), async (req, res) => {
const post = new Post({
title: req.body.title,
category: req.body.category,
content: req.body.content,
video: req.body.video,
**image: req.file.filename,**
});
try {
const savedPost = await post.save();
res.redirect("/");
} catch (e) {
console.log(e);
}
});
下面是mongodb模式
const mongoose = require("mongoose");
const PostSchema = new mongoose.Schema({
title: {
type: String,
required: true,
min: 3,
max: 255,
},
image: {
type: String,
required: false,
},
category: {
type: String,
required: false,
},
content: {
type: String,
},
video: {
type: String,
},
uploadDate: {
type: Date,
default: () => Date.now(),
},
});
module.exports = mongoose.model("Post", PostSchema);
下面是错误:映像:请求文件,文件名,^
TypeError:无法读取undefined的属性(阅读“filename”)
1条答案
按热度按时间0md85ypi1#
你试图读取
req.file
上的属性filename
,它是空的,所以本质上你写的是null.filename
,这当然是不正确的。因此,在尝试读取
filename
属性之前,您应该检查是否存在文件。您可以通过将image: req.file.filename
替换为以下内容来执行此操作:这样,你首先检查
req.file
是否不为空。如果不是,我们将req.file.filename
分配给image。如果是,我们将null
分配给image。