我试图构建一个社交应用程序,用户可以在其中发布带有图像的文章,为了存储这些数据,我使用 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 文件中的问题,但没有找到解决方案。
我也有同样的问题。不知何故,
connect-mongo
导致了这种情况发生,所以我刚刚安装了connect-mongo
的3.2.0版本,解决了这个问题。