mongodb 如何从GridFs中检索文件?gfs.files.find()不工作,永远加载

pkwftd7m  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(118)

我试图显示所有的文件,所以我想检索所有的文件作为数组第一,这样我就可以Map的前端部分。
我尝试通过https://www.youtube.com/watch?v=3f5Q9wDePzY&t=1966s解决这个问题。看起来自从视频制作以来,GridFs上已经有了很多更新。我尝试了上面视频回复的所有解决方案,以及stackoverflow上的解决方案。不幸的是,他们都没有工作。
这部分显示了我使用的模块,以及如何连接到MongoDB,如何初始化GFS等。

const path = require('path');
const express = require('express');
const app = express();
const multer = require('multer');
const Grid = require('gridfs-stream');
const {GridFsStorage} = require('multer-gridfs-storage');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const crypto = require('crypto')

require('dotenv').config();
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(bodyParser.json());

//connecting MongoDB
const conn = mongoose.createConnection(process.env.MONGOOSE_URI, { useNewUrlParser: true, useUnifiedTopology: true });

//Initialize GridFS
let gfs;
conn.once('open', () => {
  console.log('GridFS initialized!')
  gfs = Grid(conn.db, mongoose.mongo);
  gfs.collection('uploads');  
  
});

// Create storage engine for Multer
const storage = new GridFsStorage({
  url: process.env.MONGOOSE_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,
          metadata:{
            name: req.body.name,
            email: req.body.email,
            phone: req.body.phone
          }
        };
        resolve(fileInfo);
      });
    });
  
}});

字符串
这是检索文件的路径。

//retreiving the datas
app.get('/data', (req, res)=>{
  
  gfs.files.find().toArray((err, files) => {
    
    // Check if files
    if (!files || files.length === 0) {
      return res.status(404).json({
        err: 'No file exists'
      })
    } 
    return res.json(files);
  });
})


问题出在“GET”路由上。当我执行'GET'请求时,gfs.files.find()不起作用。它是无限加载的。它不会到达下一行。所以当我尝试gfs.find()时,它说'gfs.find()不是一个函数'。我想知道如何解决这个问题。

9o685dep

9o685dep1#

我也有这个问题。我跟着同样的youtube教程https://www.youtube.com/watch?v=3f5Q9wDePzY,卡住了好几天。然后我尝试了下面的代码,然后它为我工作。我不知道那里发生了什么。希望这对你有用。

app.get("/files", async (req, res) => {
    await gfs.files.find().toArray((err, files) => {
    if (err) return res.status(400).json({ err });
    console.log({files});
  });
});

字符串

相关问题