NodeJS 文件输入不能为空以保存到MongoDB

yuvru6vn  于 2023-03-22  发布在  Node.js
关注(0)|答案(1)|浏览(195)

当试图将注册表保存到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”)

0md85ypi

0md85ypi1#

你试图读取req.file上的属性filename,它是空的,所以本质上你写的是null.filename,这当然是不正确的。
因此,在尝试读取filename属性之前,您应该检查是否存在文件。您可以通过将image: req.file.filename替换为以下内容来执行此操作:

image: req.file ? req.file.filename : null

这样,你首先检查req.file是否不为空。如果不是,我们将req.file.filename分配给image。如果是,我们将null分配给image。

相关问题