对“正常” MongoDB条目使用multer和multer-gridfs-storage

问题描述

我是multer / MongoDB的新手,无法弄清楚如何保存文件普通数据库条目,例如

    {
      title: 'Some title',description: 'A description',body: 'A detailed blog post'
    }
一次

一篇博客文章。输入表单看起来像

<form action="http://localhost:8080/upload"
      method="POST"
      encType="multipart/form-data"
>
  <div><label htmlFor="title">Title: </label><input name="title"/></div>
  <br/>
  <div><label htmlFor="description">Description: </label><input name="description"/></div>
  <br/>
  <div><label htmlFor="body">Text: </label><input name="body"/></div>
  <br/>
  <input
    type="file"
    name="file"
    id="input-files"
  />
  <br/>
  <button type="submit">Submit</button>
</form>

我尝试过

    const Blog = require('../models/blog-model');
    const util = require("util");
    const multer = require("multer");
    const GridFsstorage = require("multer-gridfs-storage");

    var storage = new GridFsstorage({
      url: "mongodb://localhost:27017/blogs",options: { useNewUrlParser: true,useUnifiedTopology: true },file: (req,file) => {
        new Blog({
          title: req.body.title,description: req.body.description,body: req.body.body,}).save((err,blog) => {
          if(err) {
            console.log("Error while saving blog entry.");
          } else {
            console.log("Blog entry posted.");
          }
        });

        const match = ["image/png","image/jpeg"];
        if (match.indexOf(file.mimetype) === -1) {
          const filename = `${Date.Now()}-${file.originalname}`;
          return filename;
        }
        return {
          bucketName: "photos",filename: `${Date.Now()}-${file.originalname}`
        };
      }
    });

    var uploadBlog = multer({ storage: storage }).single("file");
    var uploadBlogMiddleware = util.promisify(uploadBlog);
    module.exports = uploadBlogMiddleware;

但是,只有文件被上载到博客数据库内的照片存储桶,而博客模型/架构未保存。甚至不会在save函数的lambda内打印任何一条日志语句。

常见做法是分别上传文件和文本,然后以某种方式链接它们吗?谷歌搜索一个小时没有给我一个有效的答案。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)