【问题标题】:TypeError: Cannot read properties of undefined (reading 'findOne') node js gridFS类型错误:无法读取未定义的属性(读取 \'findOne\')节点 js gridFS
【发布时间】:2022-11-21 17:19:27
【问题描述】:

我有 gfs 方法从 mongoDB 获取图像,代码在主 app.js 时工作正常 但是当我试图将它移动到一个文件夹时它返回TypeError: Cannot read properties of undefined (reading 'findOne')

我的图片/猫鼬模型:

const mongoose = require('mongoose');
const mongoURI = process.env.MONGOURI;
const crypto = require("crypto");
const multer = require("multer");
const {GridFsStorage} = require("multer-gridfs-storage");
const Grid = require("gridfs-stream");
const path = require('path');


const conn = mongoose.createConnection(mongoURI);

//Init gfs
let gridfsBucket; 

let gfs = conn.once('open', () => {
  gridfsBucket = new mongoose.mongo.GridFSBucket(conn.db, {
  bucketName: 'uploads'
});

  gfs = Grid(conn.db, mongoose.mongo);
  gfs.collection('uploads');
  return gfs;
})



//create Storage engine
const storage = new GridFsStorage({
  limits: { fileSize: 5 * 1000 * 1000 },
  url: mongoURI,
  file: (req, file) => {
    return new Promise((resolve, reject) => {
      crypto.randomBytes(8, (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 });


module.exports = {
    upload,
    gridfsBucket,
    gfs,
    conn
}

我的获取图像路线:

const {gridfsBucket} = require('../models/mongoose');
const gfs = require('../models/mongoose');


  exports.getImg = (req, res) => {
    console.log(`req file name is: ${req.params.filename}`);
    gfs.files.findOne({filename: req.params.filename}, (err, file) => {

      //Check if file exist
      if(!file || file.length === 0) {
        return res.status(404).json({
          err: "No file exist"
        });
      } 
        // Check if image
      if(file.contentType === "image/jpeg" || file.contentType === "image/png" || file.contentType === "image/jpg" || file.contentType === "image/heic") {
        //Read output to client
        const readstream = gridfsBucket.openDownloadStreamByName(file.filename);
        readstream.pipe(res);
      } else {
        res.status(404).json({err: "Not an image"});
      }
    });
  };

该代码最初位于 main app.js 并且它可以工作,在我将它移动到内部文件夹后它停止工作

【问题讨论】:

    标签: node.js express mongoose gridfs-stream multer-gridfs-storage


    【解决方案1】:

    根据语法,gfs 不是您所期望的。 您正在尝试访问模块内的 gfs。试试看:

    const {gfs} = require('../models/mongoose');
    

    【讨论】:

      猜你喜欢
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 2021-07-19
      • 2021-01-17
      • 2018-04-29
      • 2021-02-03
      相关资源
      最近更新 更多