Node.js "Error: read ECONNRESET"

3

我正在尝试通过Node.js连接到Mongo数据库,但是出现了以下错误:

connection error: { Error: read ECONNRESET
at exports._errnoException (util.js:1022:11)
at TCP.onread (net.js:610:25) name: 'MongoError', message: 'read ECONNRESET' }
(node:3868) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoError: read ECONNRESET

这是我用来连接的代码:

const mongoose = require('mongoose');
mongoose.Promise = global.Promise;

module.exports = (config) => {

        const fs = require('fs');

        let key = fs.readFileSync('../server/test/keys/cert_key.pem');
        let ca = [fs.readFileSync('../server/test/keys/ca.pem')];

        let o = {
            server: {
                sslValidate: true,
                sslCA: ca,
                sslKey: key,
                sslCert: key
            }
        };
        mongoose.connect(config.connectionString, o);


    let database = mongoose.connection;

    database.on('error', console.error.bind(console, 'connection error:'))

    database.once('open', (error) => {
        if (error) {
            console.log(error);
            return;
        }

        console.log('MongoDB ready!')
    });

    require('./../models/Role').initialize();
    require('./../models/User');
    require('./../models/Item');
    require('./../models/character/Character_item');
    require('./../models/Article');
    require('./../models/Friend_request');
    require('./../models/Code');
    require('./../models/Ring');
    require('./../models/Ring_shop');
    require('./../models/Comment');
};

如果我尝试从Robo3T连接到Mongo,它可以正常工作。因此看起来问题在于我的Node代码。有什么建议吗?

请确保您的Mongo实例正在运行。 - Manjeet Thakur
什么是配置? - mehulmpt
配置文件包含两个不同的环境 - 生产和开发。我只需更改一个字符串即可更改“connectionString” - localhost或IP。 - Bobonik
@ManjeetThakur 我的Mongo实例一直在运行。 - Bobonik
请在此处查看:https://github.com/Automattic/mongoose/issues/3588 - Manjeet Thakur
3个回答

2
根据mongoDB node驱动文档,你必须在服务器选项中传递ssl:true以通过SSL连接,否则将忽略SSL。
我的标准ssl db选项如下:
         server: {
                ssl:        true,
                sslValidate:true,
                sslCA:      ca,
                ca:         ca,
                sslKey:     key,
                sslCert:    key
            }

这解决了问题,奇怪的是两周前它没有 "ssl: true" 也能工作。 - Bobonik
如果连接字符串中包含 ssl=true,则同样可以工作。 - Daphoque

1

我在使用MongoDB提供的云服务时遇到了同样的问题。原因是我配置了家里的IP地址连接,而不是工作的IP地址。在云服务设置中添加了工作IP地址后,我就能够连接成功了。


0

确认您的mongodb数据库文件没有损坏。如果.wt文件已经损坏,您将会收到该错误。您可以在存储路径下找到.wt文件。例如:

storage: dbPath: E:\Data\mongodb

如果您备份了数据,您可以使用mongorestore命令修复数据。否则,您可以删除数据库并重新初始化一个新的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接