多个 MongoDB 连接的 Multer GridFsStorage 动态配置

Nik*_* IO 5 mongoose mongodb gridfs multer multer-gridfs-storage

因此,我使用 MongoDB Atlas、Mongoose、Multer 和 GridFsStorage 将文件上传到云上的单个数据库,效果很好,但我希望能够动态使用不同的数据库连接将文件上传到不同的数据库

为此,我想设置 Multer GridFsStorage 配置,以便“db”属性字段根据 API 请求动态更改。但是,我无法访问“db”属性内的 HTTP 请求对象,这使得我可以动态更改数据库连接。GridFsStorage 配置对象中的 “db”属性仅接受以下内容:在此输入图像描述

在下面的示例中,您可以看到我正在使用自定义 getDatabaseConnection() 方法创建数据库连接,然后将该连接传递到接受单个静态数据库连接的数据库字段中。

// Multer GridFsStorage configuration.
const storage = new GridFsStorage({
    
    // I NEED TO CHANGE THE DB CONNECTION DYNAMICALLY TO UPLOAD FILES TO DIFFERENT 
    // DATABASES, BUT I HAVE NO ACCESS TO THE HTTP REQUEST OBJECT INSIDE THE DB FIELD!
    db: connectionFactory.getDatabaseConnection(process.env.DB_CONNECT), 
    
    // I can access the request object (req) inside the "file" field.
    file: (req, file) => {
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)

有没有办法访问 GridFsStorage 配置中的 HTTP 请求对象,以便我可以使用多个数据库连接动态设置“db”字段,或者我是否以错误的方式处理此问题?

更新: multer-gridfs-storage 项目的所有者已在 Github 上对此问题发表了评论,他似乎有兴趣将其添加到下一个版本中。您可以在 Github 上查看该问题以了解最新情况。

小智 3

显然 multer-gridfs-storage 引擎缺少您正在寻找的功能。您可以尝试在此节点模块的GitHub 页面上为功能请求创建新问题。

我注意到您正在寻找信誉良好的来源。devconcept似乎是该项目的主要贡献者。希望他可以通过建议解决方法或添加一个函数来访问 db 属性中的 HTTP 请求对象并向其返回一个 Mongoose 连接对象(该函数可以是 db 属性的替代输入选项)来帮助您解决此功能除了猫鼬连接对象)。

编辑

您可以尝试的另一件事是使用gridfs-stream包的createWriteStream()函数,而不是使用 gridfs-store 来上传文件。您可以在这篇文章的接受答案中看到此功能的实现。