Reputation: 15
I am trying to make the functionality of uploading images to MongoDB using GridFS. I am getting the error please have a look
Complete Error:
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
K:\Development\MindFuel\Backend\node_modules\multer-gridfs-storage\lib\gridfs.js:71
throw new Error('Error creating storage engine. At least one of url or db option must be provided.');
^
Error: Error creating storage engine. At least one of url or db option must be provided.
at new GridFsStorage (K:\Development\MindFuel\Backend\node_modules\multer-gridfs-storage\lib\gridfs.js:71:19)
at Object.<anonymous> (K:\Development\MindFuel\Backend\Helpers\Libraries\imageUpload.js:9:18)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
at Module.load (node:internal/modules/cjs/loader:1207:32)
at Module._load (node:internal/modules/cjs/loader:1023:12)
at Module.require (node:internal/modules/cjs/loader:1235:19)
at require (node:internal/modules/helpers:176:18)
at Object.<anonymous> (K:\Development\MindFuel\Backend\Routers\story.js:2:21)
at Module._compile (node:internal/modules/cjs/loader:1376:14)
Node.js v20.11.1
[nodemon] app crashed - waiting for file changes before starting...
Connect Database file
const Grid = require("gridfs-stream");
const mongoose = require("mongoose");
const connectDatabase = async () => {
const conn = await mongoose.createConnection(process.env.MONGO_URI, { useNewUrlParser: true });
let gfs;
conn.once('open', ()=>{
// Init stream
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('images');
})
console.log("Connected database successfully");
}
module.exports = connectDatabase;
Here is my image Upload file in NodeJS
const CustomError = require("../error/CustomError")
const crypto = require('crypto');
const multer = require("multer")
const { GridFsStorage } = require("multer-gridfs-storage")
const path = require("path")
// create storage engine
const storage = new GridFsStorage({
url: process.env.MONGO_URI,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString("hex") + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: "images"
};
resolve(fileInfo);
});
});
}
});
const fileFilter = (req, file, cb) => {
allowedMimeTypes = ["image/jpeg", "image/jpg", "image/png", "image/gif"]
if (!allowedMimeTypes.includes(file.mimetype)) {
return (new CustomError("Please provide a valid image file ", 400), null)
}
cb(null, true);
}
const imageUpload = multer({ storage, fileFilter })
module.exports = imageUpload;
My process.env.MONGO_URI variable is in the form: URI=mongodb+srv://...
Any help is greatly appreciated :)
Upvotes: 0
Views: 87
Reputation: 11
The process.env.MONGO_URI wil be undefined. If you are using dotenv just added to your Upload file like this
require('dotenv').config()
You should be fine to go
Upvotes: 0