我应该如何从 GridFs 检索文件? gfs.files.find() 不起作用并永远加载

问题描述 投票:0回答:2

我正在尝试显示所有文件,所以我想首先将所有文件作为数组检索,以便我可以映射到前端部分。

我尝试通过https://www.youtube.com/watch?v=3f5Q9wDePzY&t=1966s解决这个问题。 自从视频制作以来,GridF 似乎已经有了很多更新。我尝试了上面视频回复中的所有解决方案,以及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() 不是一个函数”。我想知道如何解决这个问题。

node.js mongodb express gridfs multer-gridfs-storage
2个回答
0
投票

我也有这个问题。我遵循了相同的 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});
  });
});

© www.soinside.com 2019 - 2024. All rights reserved.