有没有一种使用mongo-topology-manager创建ReplSet的方法

时间:2019-11-26 16:05:31

标签: node.js mongodb

我已经阅读了文档mongo_topology,以创建一个简单的ReplSet。老实说,我只是复制了相同的示例,但是我遇到了以下问题。

2019-11-26T15:46:33.051Z mongoose version: 5.7.12
D:\Alexa\node_modules\mongodb-topology-manager\lib\replset.js:124
        .toString()
         ^

TypeError: Cannot read property 'toString' of null
at ChildProcess.<anonymous> (D:\Alexa\node_modules\mongodb-topology-manager\lib\replset.js:124:14)
at ChildProcess.emit (events.js:210:5)
at maybeClose (internal/child_process.js:1021:16)
at Socket.<anonymous> (internal/child_process.js:430:11)
at Socket.emit (events.js:210:5)
at Pipe.<anonymous> (net.js:658:12)

我经历了各种论坛,但没有人能给出解决此问题的答案。有什么方法可以调试以下问题?

下面是代码

const { ReplSet } = require('mongodb-topology-manager');
const mongoose = require('mongoose');

run().catch(error => console.error(error));

async function run() {

   await setupReplicaSet();

   const uri = 'mongodb://localhost:31000,localhost:31001,localhost:31002/' +'test?replicaSet=rs0';

   await mongoose.connect(uri);
   await mongoose.connection.createCollection('Person');


   const personSchema = new mongoose.Schema({
     name: String
   });
   const Person = mongoose.model('Person', personSchema, 'Person');

   Person.watch().
     on('change', data => console.log(new Date(), data));

   console.log(new Date(), 'Inserting doc');
   await Person.create({ name: 'Axl Rose' });
   console.log(new Date(), 'Inserted doc');
 }

async function setupReplicaSet() {
   const bind_ip = 'localhost';
   const replSet = new ReplSet('mongod', [
   { options: { port: 31000, dbpath: 
   `${__dirname}/data/db/31000`, bind_ip } },
   { options: { port: 31001, dbpath: 
   `${__dirname}/data/db/31001`, bind_ip } },
   { options: { port: 31002, dbpath: 
   `${__dirname}/data/db/31002`, bind_ip } }
   ], { replSet: 'rs0' });

  // Initialize the replica set
  await replSet.purge();
  await replSet.start();
  console.log(new Date(), 'Replica set started...');
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我最终才意识到mongod不在路上。添加修复它。