首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从mongodb获取文件元数据,因为Gridfs-stream的gfs未定义

无法从mongodb获取文件元数据,因为Gridfs-stream的gfs未定义
EN

Stack Overflow用户
提问于 2021-08-30 16:06:14
回答 1查看 207关注 0票数 2

我可以通过POST请求使用标准的Gridfs-stream实现将文件上传到mongodb。但是,当我需要通过GET请求查看文件元数据时,我得到了错误:

代码语言:javascript
复制
TypeError: Cannot read property 'files' of undefined

显然,它没有认识到我对gfs.This的定义是我的路由处理器:

代码语言:javascript
复制
router.get('/image/:filename', (req, res) => {

  gfs.files.find({filename: req.params.filename}, function(err, file) {
    let readStream = gfs.createReadStream({filename: file.filename});
    let data = '';
    readStream.on('data', (chunk) => {
      data += chunk.toString('base64');
    })
    readStream.on("error", function (err) {
      res.send("Image not found");
    });
    readStream.pipe(res);
  })

  res.json();
});

我以最简单的方式定义了gridfs-stream:

代码语言:javascript
复制
const conn = mongoose.createConnection(URI, {useNewUrlParser:true, useUnifiedTopology:true});

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

const storage = new GridFsStorage({
    url: URI,
    file: (req, file) => {...}
});

const upload = multer({ storage });

我不明白这里有什么问题,我被困了好几天!

EN

回答 1

Stack Overflow用户

发布于 2021-08-31 18:18:39

尝试使用以下命令:

代码语言:javascript
复制
app.get("/file/:filename", async (req, res) => {
    try {
        const file = await gfs.files.findOne({ filename: req.params.filename });
        const readStream = gfs.createReadStream(file.filename);
        readStream.pipe(res);
    } catch (error) {
        res.send("not found");
    }
});

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68987103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档