2016-10-18 15 views
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' } 

私は、クラスタの各フォークでマングースを使用して、本当にできる午前または別の解決策はありますか?

答えて

1

私にとっては、このその作業をしてみてください....

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); 
    }) 
} 
は は
+0

JSコードが本当に悩ませていなかった...それはモンゴデーモンだった: '( とにかくありがとう、私はあなたのコードを試してみました、それがうまく機能します –

関連する問題