You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeError: GridFsStorage不是构造函数报错问题求助

解决「TypeError: GridFsStorage is not a constructor」问题

这个报错大概率是因为multer-gridfs-storage模块的引入方式和版本不匹配导致的,我来一步步帮你排查解决:

1. 修正模块引入方式

从v4版本开始,multer-gridfs-storage的CommonJS导出方式发生了变化,你原来的引入方式只适用于旧版本。请把依赖引入代码改成以下两种方式之一:

方式一:使用.default获取默认导出

const GridFsStorage = require('multer-gridfs-storage').default;

方式二:解构导出的构造函数

const { GridFsStorage } = require('multer-gridfs-storage');

2. 修复代码中的拼写错误

虽然这不是当前报错的直接原因,但你的代码里有一个变量名拼写错误,会导致后续执行失败:
在file回调里,你定义的是const fileInfor = {...},但resolve时写的是resolve(fileInfo)(多了一个m),请修正为:

resolve(fileInfor);

3. 验证版本兼容性

如果上述修改后仍报错,可以检查项目中multer-gridfs-storage的版本:
打开项目根目录的package.json,查看multer-gridfs-storage的版本号:

  • 若为v4及以上版本,用上面的新引入方式即可;
  • 若为v3及以下版本,原引入方式是可行的,此时需要检查mongoose、multer等依赖的版本是否兼容。

修正后的完整代码示例

const GridFsStorage = require('multer-gridfs-storage').default;
const multer = require('multer');
const crypto = require('crypto');
const path = require('path');
const mongoose = require('mongoose');

const DBURI = '你的数据库连接字符串';
const conn = mongoose.createConnection(DBURI);

let gfs;
conn.once('open', ()=> {
  // 新版GridFSBucket替代旧的Grid API
  gfs = mongoose.mongo.GridFSBucket(conn.db, {
    bucketName: 'uploads'
  });
})

const storage = new GridFsStorage({
  url: DBURI,
  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 fileInfor = {
          filename: filename,
          bucketName: 'uploads'
        };
        resolve(fileInfor); // 修正拼写错误
      });
    });
  }
});
const upload = multer({storage});

另外补充一点:新版MongoDB驱动已经用GridFSBucket替代了旧的Grid API,上面的代码也同步做了更新,能避免后续可能出现的API兼容性问题。

内容的提问来源于stack exchange,提问作者Gabriel Gavrilov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:17:42