我试图显示所有的文件,所以我想检索所有的文件作为数组第一,这样我就可以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()不是一个函数'。我想知道如何解决这个问题。
1条答案
按热度按时间9o685dep1#
我也有这个问题。我跟着同样的youtube教程https://www.youtube.com/watch?v=3f5Q9wDePzY,卡住了好几天。然后我尝试了下面的代码,然后它为我工作。我不知道那里发生了什么。希望这对你有用。
字符串