GridFSBucket 错误

GridFSBucket Errors

当我尝试使用 mongodb 中的 GridFSBucket 时,在 fs.chunks 集合中创建了块,但没有创建 fs.files 文档。有没有可能发生这种情况的原因或者这是一个错误?

这将在我的本地机器上工作,docker 在我的本地机器上工作,但在 AWS EC2 上的 docker 上不工作。

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 };

我搜索了这个问题的答案,结果发现 Node.js 版本 13 中有一个错误。

我将 Node.js 版本降级到 12,上面的代码运行良好。