0

我遇到了 node.js/cluster 和 mongoose 连接的问题。我不确定我是否可以使用 mongoose 在同一个数据库上连接我的 Web 服务器的多个分支,是吗?

我的代码有一段:

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const helmet = require('helmet');
const mongoose = require('mongoose');
const http = require('http');

if (cluster.isMaster) {
  const cpuCount = require('os').cpus();
  cpuCount.forEach((cpu) => {
    cluster.fork(); // fork web server
  });
  cluster.on('exit', (worker, code, signal) => {
    ... // log
    cluster.fork(); // on dying worker, respawn
  });
} else {

  //express middleware
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: false }));
  app.use(helmet());
  ... // express and global config

  // The mongoose connection dit not work with cluster
  mongoose.connect(__DB_URL__); // where __DB_URL__ = 'mongodb://database/test'

  ... //server config
  const server = http.createServer(app);
  server.listen
}

我可以在不使用cluster(不使用代码的第一部分)(或使用cluster但不使用猫鼬...)的情况下运行此服务器,并且当我使用运行此服务器时cluster;工人没有崩溃,但猫鼬连接!

这是json错误:

{ MongoError: failed to connect to server [database:27017] on first connect
    at Pool.<anonymous> (/Users/...)
    ... // long path error
  name: 'MongoError',
  message: 'failed to connect to server [database:27017] on first connect' }

我真的能够在集群的每个分支中使用猫鼬还是有另一种解决方案?

4

1 回答 1

2

试试这对我有用....

 const express = require('express');
const app = express();
const bodyParser = require('body-parser');
//const helmet = require('helmet');
const mongoose = require('mongoose');
const cluster = require('cluster');
const http = require('http');

 var dbURI = 'mongodb://localhost:27017/dal'; 


// Create the database connection 
mongoose.connect(dbURI); 


mongoose.connection.on('connected', function () {  
 console.log('Mongoose default connection open to ' + dbURI);
 }); 


  mongoose.connection.on('error',function (err) {  
  console.log('Mongoose default connection error: ' + err);
 }); 


  mongoose.connection.on('disconnected', function () {  
  console.log('Mongoose default connection disconnected'); 
  });

 // If the Node process ends, close the Mongoose connection 
process.on('SIGINT', function() {  
 mongoose.connection.close(function () { 
console.log('Mongoose default connection disconnected through app      termination'); 
  process.exit(0); 
}); 
}); 


  if (cluster.isMaster) {
  const cpuCount = require('os').cpus();
  cpuCount.forEach((cpu) => {
   cluster.fork(); // fork web server
  });
  cluster.on('exit', (worker, code, signal) => {

    cluster.fork(); // on dying worker, respawn
  });
  } else {

    //express middleware
   app.use(bodyParser.json());
   app.use(bodyParser.urlencoded({ extended: false }));
   // app.use(helmet());

   app.listen(3000, function(){
console.log(3000);
  })
}
于 2016-10-18T10:51:46.687 回答