Ошибки GridFSBucket - PullRequest
       30

Ошибки GridFSBucket

0 голосов
/ 03 мая 2020

Когда я пытаюсь использовать GridFSBucket из mongodb, чанки создаются в коллекции fs.chunks, но документы fs.files не создаются. Есть ли причина, по которой это может происходить или это ошибка?

Это будет работать на моей локальной машине и docker на моей локальной машине, но не на docker на AWS EC2.

const { MongoClient, GridFSBucket } = require('mongodb');
const crypto = require('crypto');
const dotenv = require('dotenv');

dotenv.config();

const url = process.env.MONGO_URI;
const dbName = 'tree_club';
const opts = { useUnifiedTopology: true };

const getPosts = async () => {
    const client = await MongoClient.connect(url, opts);
    const db = client.db(dbName);
    const posts = await db.collection('post').find({}).sort({ created: -1 }).toArray();

    client.close();

    return posts;
};

const createPost = async (parent, { markdown, file }) => {
    const client = await MongoClient.connect(url, opts);
    const db = client.db(dbName);
    const bucket = new GridFSBucket(db);

    const fileId = file ? crypto.randomBytes(64).toString('hex') : undefined;
    const { ops: [post] } = await db.collection('post').insertOne({
        markdown,
        fileId,
        created: Date.now()
    });

    if (file) {
        await new Promise(async (resolve, reject) => {
            const { createReadStream } = await file;
            const readStream = createReadStream();
            const writeStream = bucket.openUploadStreamWithId(fileId, fileId);
            readStream.pipe(writeStream);
            readStream.on('error', () => {
                console.log('error');
            });
            readStream.on('finish', () => {
                resolve();
                client.close();
            });
        });
    } else {
        client.close();
    }

    return post;
};

const pipeImage = async (req, res) => {
    const client = await MongoClient.connect(url, opts);
    const db = client.db(dbName);
    const bucket = new GridFSBucket(db);

    try {
        const readStream = bucket.openDownloadStream(req.params.fileId);
        readStream.pipe(res);
        readStream.on('finish', () => {
            client.close();
        });
    } catch (err) {
        res.status(400).json('Image was not found');
    }
};

module.exports = { getPosts, createPost, pipeImage };
...