【问题标题】:Hard time understanding gridfs and connections很难理解 gridfs 和连接
【发布时间】:2019-04-01 13:16:34
【问题描述】:

所以我看了这个视频:https://youtu.be/EVIGIcm7o2w

它解释了很多东西。但问题是我已经用Express 创建了一个项目,所以我的连接是在 app.js 中完成的,如下所示:

// mongodb connection
var mongoose = require('mongoose');
var config = require('./globals/config');
mongoose.connect(config.db, {useNewUrlParser: true},).catch(e => console.log(e));

var db = mongoose.connection;
db.once('open', () => {
    console.log('Connected to mongodb. Go to http://localhost:3000 to open app');
});

现在我想使用 gridFS,在不同的文件中将文件上传到我的数据库,我尝试了这个:

var grid = require('gridfs-stream');
var mongoose = require('mongoose');
var fs = require('fs');
uploadFile(file) {
    var config = require('./config');
    mongoose.connect(config.db, {useNewUrlParser: true},).catch(e => console.log(e));
    var conn = mongoose.connection;
    grid.mongo = mongoose.mongo;
    const gfs = grid(conn.db);
    const writeStream = gfs.createWriteStream({
        filename: file.filename,
    });
    fs.createReadStream(file.path).pipe(writeStream);
    writeStream.on('close', function (file) {
        console.log(`${file.filename} written to the db`);
    });
}

但这没有任何意义,因为我要重新打开 2 个连接。我查看了 mongoose-gridfs,但它也显示以“app.js”的形式使用它,没有跨文件的做事方式。如何在不打开 2 个连接和使用 2 个不同的 js 文件的情况下使用 gridfs?

【问题讨论】:

    标签: javascript node.js mongodb gridfs gridfs-stream


    【解决方案1】:

    创建一个单独的模块,假设mygridfs.js 并将您的函数放在module.exports 中。将mongoose 设为该函数的参数:

    var grid = require('gridfs-stream');
    var fs = require('fs');
    exports.uploadFile = function(file, mongoose) {
        grid.mongo = mongoose.mongo;
        const gfs = grid(mongoose.connection.db);
        const writeStream = gfs.createWriteStream({
            filename: file.filename,
        });
        fs.createReadStream(file.path).pipe(writeStream);
        writeStream.on('close', function (file) {
            console.log(`${file.filename} written to the db`);
        });
    }
    

    在您的主 app.js 文件中,只需要模块:

    var mygridfs= require("mygridfs");
    mygridfs.uploadFile(file, mongoose);
    

    【讨论】:

    • 但我需要的模块不是来自我的 app.js 文件。它来自不同的模块
    • 所有你需要做的就是将猫鼬对象传递给所有需要它的模块
    • 不会像这样传递它导致函数被调用吗?
    • 哪个函数?建立连接后,对象将封装连接状态...不确定您的意思
    • uploadFunction 是一个函数。那我怎样才能向模块发送一些东西呢?
    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2011-04-22
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2021-12-29
    相关资源
    最近更新 更多