I was tring to build a social app where users can post articles with images, to store these data I am using mongoDB with gridFS for storing images. I am using multer-gridfs-storage to use as a middleware to handle files. But whenever I am trying to upload a file, the server crashes showing that the _id property in the gridfs.js file is undefined. I have tried every options to resolve the issue but still it is unsolved
This is my upload.js middleware
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 },
]);
and this is the error
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)
I tried changine the configurations of my mongoDB connections along with looking into the GridFs.js file for the issue but, didn't reach a solution.
I had the same problem. Somehow
connect-mongo
was making this happen so I just installed version 3.2.0 ofconnect-mongo
which solved the problem.