首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: mongodb_1.ObjectID不是带有GridFsStorage的构造函数

TypeError: mongodb_1.ObjectID不是带有GridFsStorage的构造函数
EN

Stack Overflow用户
提问于 2021-07-17 17:57:24
回答 3查看 2.8K关注 0票数 0

我是nodejs和mongoDB的新手,有人能帮我解决这个问题吗?我曾经用multer-gridfs-storagemultergridfs-stream上传文件和图像。但是我得到了这个TypeError: mongodb_1.ObjectID不是()中的构造函数,它位于GridFsStorage的承诺中。我已经分享了下面的代码。

代码语言:javascript
复制
const express  = require('express');
const app = express();
require('dotenv').config()
const PORT = process.env.PORT;
const morgan = require('morgan');
const multer = require('multer');
const {GridFsStorage} = require('multer-gridfs-storage');
const Grid = require('gridfs-stream');
const methodOverride = require('method-override');
const mongoose = require('mongoose');
const path = require('path');
const crypto = require('crypto');

const MongoURI = "atlas url";


app.use(methodOverride('_method'));
app.use(express.json())
app.use(morgan(':method :status :url'));

const connectDB = mongoose.createConnection(MongoURI,{useUnifiedTopology:true,useFindAndModify:false, useNewUrlParser:true,useCreateIndex: true})

let gfs;

connectDB.once('open',()=>{
    console.log("dbConnected....")
    gfs =  Grid(connectDB.db,mongoose.mongo)
    gfs.collection('uploads');
})

const storage  = new GridFsStorage({
    url:MongoURI,
    file:(req,file)=>{
       
      return new Promise((resolve, reject)=>{
          crypto.randomBytes(16,(err,buf)=>{
              console.log("buf",buf)
              if(err){
                 
                  return reject(err);
              }
              const filename = buf.toString('hex') + path.extname(file.originalname);
              console.log("filename",filename)
              const fileInfo = {
                  filename:filename,
                  bucketName:'uploads'
              };
            
              resolve(fileInfo)
          })
      })
    }
})

 


app.listen(PORT,()=>{
    console.log(`port connected....${PORT}`)
})

const upload = multer({storage:storage})

app.post('/uploadfile',upload.single('file'),async(req,res)=>{
   res.json({
       file:req.file
   })
})

EN

回答 3

Stack Overflow用户

发布于 2021-07-21 06:55:29

我的解决方案是将节点模块gridfs.js文件中的gridfs.js()更改为mongodb_1.ObjectI"d"(),一切正常。我想作者是为mongodb的旧版本编写的,但在我的例子中,它是较新的版本,所以"d“应该是小写。

更新:

有人刚刚发布了一个问题到作者的github,你可以跟随此页的官方解决方案。

票数 3
EN

Stack Overflow用户

发布于 2021-07-21 18:11:52

您必须调用mongodb.ObjectId而不是ObjectID,然后可以使用该名称的const。但是有了ObjectId,一切都会正常的。继续编码。

票数 1
EN

Stack Overflow用户

发布于 2021-07-29 15:50:28

访问https://github.com/devconcept/multer-gridfs-storage/issues/352#issue-946945336,将方法名从ObjectID()更改为对我有用的mongodb_1类的ObjectId(),这看起来像是node_modules中gridfs.js文件中的兼容性问题。

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

https://stackoverflow.com/questions/68423041

复制
相关文章

相似问题

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