Трудное время понимания gridfs и соединений - PullRequest
0 голосов
/ 28 октября 2018

Итак, я посмотрел это видео: 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» не позволяет использовать разные способы работы.Как использовать gridfs, не открывая 2 соединения и не используя 2 разных файла js?

1 Ответ

0 голосов
/ 29 октября 2018

Создайте отдельный модуль, скажем, 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);
...