4

我有以下 db.js 模块,负责处理猫鼬连接:

'use strict';

module.exports = function(config) {
    var mongoose = require('mongoose');

    //mongoose.connect(config.connectionString);
    var db = mongoose.connection;
    db.open(config.server, config.database, config.port, {user: config.user, pass: config.password});
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', console.log.bind(console, 'connected to database server ' + config.server));
};

在我的 app.js 中,我只需调用var db = require('./db')(config.db);,我的应用程序中的所有模型都运行良好。

对于一些后台作业,我分叉了一堆子进程(使用worker-farm),并且由于我不知道如何传递连接对象(或者它是否被允许),我在每个子进程中打开了一个连接(调用db.js)。

问题是,过了一段时间我开始遇到每个子进程的错误:{ [Error: Trying to open unclosed connection.] state: 1 }. 此外,由于这会在这些子进程中导致意外异常,因此 worker-farm 会重新启动它们——这一切都陷入了一个可怕的无限循环中(是的,我可以解决这个循环——但我宁愿解决这个问题 :)) .

我究竟做错了什么?在工作人员池中共享猫鼬连接的最佳方式是什么?

4

0 回答 0