上传文件时,mongoDB 中的 GridFS 存储中的 _id 属性出现错误

问题描述 投票:0回答:1

我试图构建一个社交应用程序,用户可以在其中发布带有图像的文章,为了存储这些数据,我使用 mongoDB 和 gridFS 来存储图像。我正在使用 multer-gridfs-storage 用作处理文件的中间件。但每当我尝试上传文件时,服务器就会崩溃,显示 gridfs.js 文件中的 _id 属性未定义。我已经尝试了所有选项来解决问题,但仍然没有解决

这是我的 upload.js 中间件

const multer = require("multer");
const { GridFsStorage } = require("multer-gridfs-storage");
const MongoClient = require("mongodb").MongoClient;
require("dotenv").config();
// const methodOverride = require("method-override");

const promise = MongoClient.connect(process.env.MONGO_URI).then((client) =>
  client.db(process.env.DATABASE)
);

const storage = new GridFsStorage({
  // url: process.env.MONGO_URI,
  db: promise,
  options: { useNewUrlParser: true, useUnifiedTopology: true },
  file: (req, file) => {
    console.log(file);
    const match = ["image/png", "image/jpeg", "image/jpg"];
    // console.log(file);
    if (match.indexOf(file.mimetype) === -1) {
      return {
        bucketName: "files",
        filename: `${Date.now()}-posts-${file.originalname}`
      };
    }

    return {
      bucketName: "photos",
      filename: `${Date.now()}-posts-${file.originalname}`
    };

  }
});

// const upload = multer({ storage });

// module.exports = upload;
module.exports = multer({ storage }).fields([
  { name: "image", maxCount: 1 },
  // { name: "coverLetter", maxCount: 1 },
]);

这就是错误

                        id: f._id,
                              ^

TypeError: Cannot read properties of undefined (reading '_id')
    at GridFSBucketWriteStream.emitFile (C:\Users\ariel\OneDrive\Desktop\react-native\project2\server\apis\node_modules\multer-gridfs-storage\lib\gridfs.js:306:31)
    at GridFSBucketWriteStream.emit (node:events:525:35)
    at finish (node:internal/streams/writable:748:10)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

我尝试更改 mongoDB 连接的配置,并查看 GridFs.js 文件中的问题,但没有找到解决方案。

node.js mongodb multer gridfs multer-gridfs-storage
1个回答
0
投票

我也有同样的问题。不知何故,

connect-mongo
导致了这种情况发生,所以我刚刚安装了
connect-mongo
的3.2.0版本,解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.