Пн goose: Соединение должно быть открыто, чтобы сохранить ошибку файла с Grid FS - PullRequest
0 голосов
/ 13 апреля 2020

Я сталкиваюсь с этой проблемой при загрузке файла с использованием gridFS. Я также проверил сообщение stackoverflow - Ошибка: соединение с базой данных должно быть открыто для хранения файлов Просто следовал инструкциям в соответствии с ним, но также я сталкиваюсь с этой ошибкой Вот сторона express вещей:

const mongoURI="mongodb+srv://saidarshan:R@mb02501@cluster0-wjhf4.mongodb.net/project?retryWrites=true&w=majority

const promise=mongoose.connect(mongoURI, {
        useNewUrlParser: true ,
        useCreateIndex: true,
        useFindAndModify: false,
        useUnifiedTopology: true
    })
    .then(() => {
        console.log('Connected to DB');

    })
    .catch((err) => {
        console.log('ERROR', err.message);
    });


    const conn = mongoose.connection;
    let gfs;

    conn.once('open',() => {
      gfs = Grid(conn, mongoose.mongo);
      gfs.collection('uploads');
    });

    //create storage object
    const storage = new GridFsStorage({
      db: promise,
      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: 'uploads'
            };
            resolve(fileInfo);
          });
        });
      }
    });
    const upload = multer({ storage });

    //upload profile pic
app.post("/upload",upload.single("myImage"),(req,res)=>{
    res.json({file:req.file});
})

А вот html сторона вещей:

 <form action="/upload" method="POST" enctype="multipart/form-data">
        <div class="input-group mb-3 fielupload" style="display: none;width: 320px;"r>
          <div class="input-group-prepend">
            <input type="submit" class="input-group-text" value="Upload">
          </div>
          <div class="custom-file">
            <input type="file" class="custom-file-input" name="myImage">
            <label class="custom-file-label" for="inputGroupFile01">Choose file</label>
          </div>
        </div>
      </form>
...