mongodb nodejs db.collection不是一个函数

问题描述 投票:2回答:1

这是我的FollowerModel类(在ES6中)代表我的MongoDB的follower集合

import mongo from 'mongodb';

class FollowerModel {

    constructor(db, logger) {
        this._db = db;
        this._logger = logger;
    }

    async create(data) {
        try {
            data._id = mongo.ObjectID().toString();
            return await this._db.collection('follower').insertOne(data);
        } catch (error) {
            return Promise.reject(error);
        }
    }

}

export default FollowerModel;

这是我的单元测试

import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import { expect } from 'chai';
import mongo from 'mongodb';
import mongo_url from '../../config/mongodb';
import logger from '../../config/logger';
import to from 'await-to-js';
import FollowerModel from '../../model/follower';

const MongoClient = mongo.MongoClient;
const data = {
    email: 'my_email',
    phone: 'my_phone',
    code: 'my_code'
};

describe('Model: Follower', () => {

    let Follower;
    let connected = false;
    let _db;

    const connect = () => {
        try {
            const db = await MongoClient.connect(mongo_url);
            Follower = new FollowerModel(db, logger);
            connected = true;
            _db = db;
            return Promise.resolve();
        } catch (error) {
            return Promise.reject(error);
        }
    };

    before(() => connect());

    describe('create', () => {
        let _id;
        beforeEach(() => connected ? null : connect());
        it('Returns with insertedId', async () => {
            const [, result] = await to(Follower.create(data));
            return expect(result).to.have.property('insertedId');
        });
        afterEach(() => connected ?
            _db.collection('follower').deleteOne({ _id }) : connect().then(() => _db.collection('follower').deleteOne({ _id }))
        );
    });

});

这个测试失败,错误是this._db.collection is not a function对我的沮丧。当我初始化Follower实例时,db被传递给构造函数,在类中成功初始化db。我甚至尝试console.log dbdb.collection。它按预期记录db,但返回undefineddb.collection。这让我很困惑

node.js mongodb ecmascript-6 typeerror
1个回答
1
投票

自MongoDB本机NodeJS驱动程序的V3 +以来:

const db = await MongoClient.connect(mongo_url);

_db = db.db("nameOfyourDataBase");

//then you can use _db.collection
© www.soinside.com 2019 - 2024. All rights reserved.