Mongoose: "рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрдЯ рдкрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓" рдХреЗ рдмрд╛рдж рдХреЛрдИ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдЕрдкреНрд░реИрд▓ 2017  ┬╖  40рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ рдкрд╣рд▓рд╛ рдХрдиреЗрдХреНрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдиреЗрд╡рд▓рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдЬреЛ рдиреЛрдб рдХреЛ рдХреНрд░реИрд╢ рдХрд░рддрд╛ рд╣реИред

рддреЛ рдЗрд╕ рдмрдЧ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

db.on('error', console.error.bind(console, 'connection error:'));

рдЕрдм рд╣рдо рдЗрд╕ рдмрдЧ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдЕрдкрдирд╛ рдореЛрдВрдЧреЛрдбреАрдмреА рдмрдВрдж рдХрд░реЗрдВ
  2. рдиреЗрд╡рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдкрдирд╛ рдиреЛрдб рдРрдк рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
  3. рдЖрдкрдХрд╛ рдРрдк рд▓реЙрдЧ рдЗрди рдХрд░реЗрдЧрд╛: [MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]]
  4. рдЕрдкрдирд╛ MongoDB рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ
  5. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдиреЗрд╡рд▓рд╛ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣реЗ MongoDB рд╕реЗ рдирд╣реАрдВ рдЬреБрдбрд╝рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдРрдк рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ, рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░: рдЪреВрдВрдХрд┐ autoreconnect рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рддреНрдп рд╣реИ, рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ MongoDB рдлрд┐рд░ рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЬрд▓реНрдж рд╣реА рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред

рдиреЛрдЯ: рдпрджрд┐ рдкрд╣рд▓рд╛ рдХрдиреЗрдХреНрдЯ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЛрдВрдЧреЛрдбреАрдмреА рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдСрдЯреЛрд░реЗрдХрдиреЗрдХреНрдЯ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ред рд╕рдорд╕реНрдпрд╛ рдЕрд╕рдВрдЧрддрддрд╛ рд╣реИ рдпрджрд┐ рдРрдк рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ MongoDB рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

(рдпрджрд┐ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рддреНрд░реБрдЯрд┐ рдХреЛ рди рдкрдХрдбрд╝рдХрд░ рдФрд░ рдиреЛрдб рдХреЛ рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рд╕реЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред)

рдиреЛрдб v4.4.1, [email protected] , [email protected] , [email protected]

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдкрд╣рд▓реА рдмрд╛рд░ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдСрдЯреЛ-рд░реАрдХрдиреЗрдХреНрд╢рди рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реВрдВ:

function createConnection (dbURL, options) {
    var db = mongoose.createConnection(dbURL, options);

    db.on('error', function (err) {
        // If first connect fails because mongod is down, try again later.
        // This is only needed for first connect, not for runtime reconnects.
        // See: https://github.com/Automattic/mongoose/issues/5169
        if (err.message && err.message.match(/failed to connect to server .* on first connect/)) {
            console.log(new Date(), String(err));

            // Wait for a bit, then try to connect again
            setTimeout(function () {
                console.log("Retrying first connect...");
                db.openUri(dbURL).catch(() => {});
                // Why the empty catch?
                // Well, errors thrown by db.open() will also be passed to .on('error'),
                // so we can handle them there, no need to log anything in the catch here.
                // But we still need this empty catch to avoid unhandled rejections.
            }, 20 * 1000);
        } else {
            // Some other error occurred.  Log it.
            console.error(new Date(), String(err));
        }
    });

    db.once('open', function () {
        console.log("Connection to db established.");
    });

    return db;
}

// Use it like
var db = createConnection('mongodb://...', options);
var User = db.model('User', userSchema);

рдиреЗрд╡рд▓реЗ рдХреЗ рд▓рд┐рдП <4.11 db.open() рдмрдЬрд╛рдп db.openUri()
рдиреЗрд╡рд▓реЗ 4.11.7 рдХреЗ рд▓рд┐рдП рдпрд╣ рддрдХрдиреАрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдиреЗрд╡рд▓рд╛ 4.13.4 рдХреЗ рд▓рд┐рдП рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 2019/09/02: рдпрд╣рд╛рдВ promiseRetry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдорд╛рдзрд╛рди рднреА

рд╕рднреА 40 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдиреЛрдб 6, 7, рдиреЗрд╡рд▓рд╛ (рдХрдо рд╕реЗ рдХрдо 6 рдорд╣реАрдиреЗ), рдореЛрдВрдЧреЛ 3.2 - 3.4
рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ #4890

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ mongodb-core рдореБрджреНрджрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рднреА рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рдж рдХреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдк рд╡рд╣рд╛рдВ рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдпрд╣рд╛рдБ рдПрдХ рдкреВрд░реНрдг рд░реЗрдкреНрд░реЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:

const mongoose = require('mongoose');
const co = require('co');
mongoose.Promise = global.Promise;
const GITHUB_ISSUE = `gh-5169`;


exec()
  .catch(error => {
    console.error(`Error: ${ error }\n${ error.stack }`);
  });


function exec() {
  return co(function*() {
    const db = mongoose.createConnection(`mongodb://localhost:27017/${ GITHUB_ISSUE }`);
    db.on('error', (error) => {
      console.error(`in an error ${ error }\n${ error.stack }`);
    })
  });
}

рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдореЛрдВрдЧреЛрдбрдм-рдХреЛрд░ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ :

рдпрджрд┐ рдпрд╣ рд╣реЛрд╕реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рдкрд╛рддрд╛ рд╣реИ рддреЛ рдбреНрд░рд╛рдЗрд╡рд░ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрдЯ рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЕрдЧрдореНрдп рдореЗрдЬрдмрд╛рдиреЛрдВ рдкрд░ рддреНрд╡рд░рд┐рдд рд╡рд┐рдлрд▓рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реИред рдкреБрди: рдХрдиреЗрдХреНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗрд╡рд▓ рддрднреА рдкреНрд░рд╛рд░рдВрдн рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдбреНрд░рд╛рдЗрд╡рд░ рдиреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рд╣реЛред

рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдЖрд╡реЗрджрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдмреИрдарддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдХреЛрдИ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдЪрд┐рдд рд╣реИред рдпрд╣ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ рдЬреЛ рдЧрд▓рддреА рд╕реЗ рдЧрд▓рдд рд╣реЛрд╕реНрдЯ рдпрд╛ рдЧрд▓рдд рдкреЛрд░реНрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдиреЗрд╡рд▓реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдбреЗрд╡рд▓рдкрд░-рдЕрдиреБрдХреВрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдЬрдм рдСрдЯреЛ-рд░реАрдХрдиреЗрдХреНрдЯ рд╡рд┐рдХрд▓реНрдк рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ, рддрдм рддрдХ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд░рд╣реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдореЛрдВрдЧреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ (рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рддрд░рд╣ рдХреБрдЫ рдмрдирд╛рдХрд░)ред
  • рдЬрдм рдиреЗрд╡рд▓рд╛ рдРрд╕рд╛ рдХрд░ рд░рд╣рд╛ рд╣реЛ рддреЛ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рдРрд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬреЛ рдХрднреА рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдВ рд╣реИред
    (рд▓реЙрдЧ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 30 рд╕реЗрдХрдВрдбред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реАрдзреЗ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рд▓рд╛рд╣рдХрд╛рд░ error рдШрдЯрдирд╛ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрди: рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред)

рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рд╕реЗ рдпрд╛рдж рд╣реИ, рдЬрдм рдореИрдВрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж рдЬреБрдбрд╝рд╛, рддреЛ рдРрдк рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрддрд╛рд░рдмрджреНрдз рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред (рд▓реЗрдХрд┐рди рдпрд╣ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд╛рдпрдХ рд╣реИред)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рд▓реЗрдмрд▓ рдХрд░реВрдВрдЧрд╛

рдирд╣реАрдВ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдкрд░ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ MongoDB рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╕рдВрдЧрдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ mongoose рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рдн рдирд╣реАрдВ рд╣реИред

рд╕реНрдЯреНрд░рд╛рдВрдЧрд▓реВрдк рд▓реВрдкрдмреИрдХ рдореЛрдВрдЧреЛрдбрдм рдХрдиреЗрдХреНрдЯрд░ рдХреА рдпрд╣ рд╣рд╛рд▓рд┐рдпрд╛ рдкреЛрд╕реНрдЯ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрдирдХрд╛ lazyConnect рдзреНрд╡рдЬ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣рд┐рдЯ рд╣реЛрдиреЗ рддрдХ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдиреЗрдХреНрд╢рди рд╣рд╛рдирд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рднрд╛рд╡реА рд╣реЛ рдЬрд╛рдПрдВрдЧреА (рдпрд╣ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛)ред

рдореЗрд░реА рд░реБрдЪрд┐ рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╣реИ, рдЬрд╣рд╛рдВ "рдХрдВрдЯреЗрдирд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдСрд░реНрдбрд░" рдХреЛ рдЕрдХреНрд╕рд░ рд╕реЗрдЯ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди "рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХрд╛ рдХреНрд░рдо" рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдПрдХ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдЯреВрд▓ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЛрдВрдЧреЛ рдХрдВрдЯреЗрдирд░ "рдКрдкрд░" рд╣реИ, рднрд▓реЗ рд╣реА рдореЛрдВрдЧреЛ рд╕реЗрд╡рд╛ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдореЗрд░рд╛ рдореЛрдВрдЧреЛ рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 1s рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 5s рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдРрдк рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 1s рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП 1s рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдРрдк рд╕реЗрд╡рд╛ рдореЛрдВрдЧреЛ рд╕реЗрд╡рд╛ рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рд╕реЗ рдкрд╣рд▓рд╛ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ ред

рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдпрд╣ рдХрд╣рдирд╛ рд╣реИ:

рдХрдВрдкреЛрдЬрд╝ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдХрдВрдЯреЗрдирд░ "рддреИрдпрд╛рд░" рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рднреА рдЖрдкрдХреЗ рд╡рд┐рд╢реЗрд╖ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ) - рдХреЗрд╡рд▓ рддрдм рддрдХ рдЬрдм рддрдХ рд╡рд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реЛред рдЗрд╕рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХреЗ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреА рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реИред рдЙрддреНрдкрд╛рджрди рдореЗрдВ, рдЖрдкрдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рд╕реА рднреА рд╕рдордп рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЕрдВрддрддрдГ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдФрд░ рдЬрдм рднреА рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рдЬрд╛рдП рддреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

рддреЛ рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рджреЛрдиреЛрдВ рд░реБрдЦ рдорд╛рдиреНрдп рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдиреЗрд╡рд▓рд╛ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрдЯ рдкрд░ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╢рд╛рдпрдж рдХреБрдЫ рд╕рд╛рд╡рдзрд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ), рдпрд╛
  2. рдпрджрд┐ рдкрд╣рд▓рд╛ рдХрдиреЗрдХреНрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдЕрдВрддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдЖрдк рдкрд░ рдЖрддреА рд╣реИ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╕рднреА рдиреЗрд╡рд▓реЗ рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред рдпрджрд┐ рдЖрдк рдЙрддреНрдкрд╛рджрди рдореЗрдВ (рдпрд╛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн рдореЗрдВ) рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд┐рдЧреНрдз рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрдк рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред

рд░реБрдЦ 2, рдпрд╣ рддрдм рд╣реИред

рдкрд╣рд▓реА рдмрд╛рд░ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдСрдЯреЛ-рд░реАрдХрдиреЗрдХреНрд╢рди рдЪрд╛рд╣рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реВрдВ:

function createConnection (dbURL, options) {
    var db = mongoose.createConnection(dbURL, options);

    db.on('error', function (err) {
        // If first connect fails because mongod is down, try again later.
        // This is only needed for first connect, not for runtime reconnects.
        // See: https://github.com/Automattic/mongoose/issues/5169
        if (err.message && err.message.match(/failed to connect to server .* on first connect/)) {
            console.log(new Date(), String(err));

            // Wait for a bit, then try to connect again
            setTimeout(function () {
                console.log("Retrying first connect...");
                db.openUri(dbURL).catch(() => {});
                // Why the empty catch?
                // Well, errors thrown by db.open() will also be passed to .on('error'),
                // so we can handle them there, no need to log anything in the catch here.
                // But we still need this empty catch to avoid unhandled rejections.
            }, 20 * 1000);
        } else {
            // Some other error occurred.  Log it.
            console.error(new Date(), String(err));
        }
    });

    db.once('open', function () {
        console.log("Connection to db established.");
    });

    return db;
}

// Use it like
var db = createConnection('mongodb://...', options);
var User = db.model('User', userSchema);

рдиреЗрд╡рд▓реЗ рдХреЗ рд▓рд┐рдП <4.11 db.open() рдмрдЬрд╛рдп db.openUri()
рдиреЗрд╡рд▓реЗ 4.11.7 рдХреЗ рд▓рд┐рдП рдпрд╣ рддрдХрдиреАрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдиреЗрд╡рд▓рд╛ 4.13.4 рдХреЗ рд▓рд┐рдП рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ!


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 2019/09/02: рдпрд╣рд╛рдВ promiseRetry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рдорд╛рдзрд╛рди рднреА

рд╣рд╛рдп @ vkarpov15 рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореЛрдВрдЧреЛрдбрдм-рдХреЛрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдЕрдирд╣реЗрд▓реНрдб рд░рд┐рдЬреЗрдХреНрд╢рди рднреА рд▓реЙрдЧ рдХрд░реЗрдВред

MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (/Users/development/okkralabs/sem-server/services/sem-access/node_modules/mongodb-core/lib/topologies/server.js:336:35)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/Users/development/okkralabs/sem-server/services/sem-access/node_modules/mongodb-core/lib/connection/pool.js:280:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/Users/development/okkralabs/sem-server/services/sem-access/node_modules/mongodb-core/lib/connection/connection.js:187:49)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдПрдХ рдЧреИрд░-рдЙрдкрд▓рдмреНрдз MongoDb рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

(node:2545) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): MongoError: failed to connect to server [localhost:27017] on first connect [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
(node:2545) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛?

@jorgearanda рдЖрдк рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рдХреЛрдб рдирдореВрдиреЗ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@vkarpov15 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ @jorgecuesta рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ?

рдУрд╣, рдореЗрд░реА рдЧрд▓рддреАред рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдЬрд┐рдердм рд╕реНрд╡рдд: рдкреВрд░реНрдг, рд╣рд╛рдБ, рд╡рд╣

рдореИрдВ рдареАрдХ рд╡реИрд╕реА рд╣реА рдЪреАрдЬрд╝ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдЬреИрд╕реЗ @jorgecuesta , рдореИрдВ 4.11.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рд▓реЗрдХрд┐рди 5.0.0-rc2 рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ createConnection рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдореЙрдбрд▓ рдПрдХ рд╣реА рдореЛрдВрдЧреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореЛрдВрдЧреЛ рдбрд╛рдЙрди рд╣реЛрдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

2018-01-07 13:05:23-05:00: [INFO] database - reusing existing connectioun for mongodb://localhost/eiss
2018-01-07 13:05:23-05:00: [INFO] database - initializing database connection to: mongodb://localhost/eiss
2018-01-07 13:05:23-05:00: [INFO] database - reusing existing connectioun for mongodb://localhost/eiss
2018-01-07 13:05:23-05:00: [ERROR] database - Mongoose connection error: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
Unhandled rejection MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
    at Pool.<anonymous> (/Users/bill/eiss4/js/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:503:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/Users/bill/eiss4/js/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:326:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/Users/bill/eiss4/js/node_modules/mongoose/node_modules/mongodb-core/lib/connection/connection.js:245:50)
    at Object.onceWrapper (events.js:315:30)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at emitErrorNT (internal/streams/destroy.js:64:8)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickCallback (internal/process/next_tick.js:180:9)

рдореЙрдбрд▓ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЙрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдирд╛рдо рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдиреАрдЪреЗ)ред рдЬрдм рддрдХ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддрдм рддрдХ рдореЛрдВрдЧреЛ рдЪрд▓ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдареАрдХ рд╣реИ (рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧрд┐рдВрдЧ)ред рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдбреНрд░рд╛рдЗрд╡рд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рдореИрдВ @joeytwiddle рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣

const allConnections = {};

module.exports = function(dbName) {
  const url = 'http://localhost/' + dbName;
  let conn;
  log.info('initializing database connection to: ' + url);

  conn = allConnections[url];
  if (!conn) {
    log.info('creating new connection for ' + url);
    conn = mongoose.createConnection(url, {
      useMongoClient: true,
      autoReconnect: true,
      autoIndex: false,
      reconnectTries: Number.MAX_SAFE_INTEGER
    });    
    // Log database connection events
    conn.on('connected', () => log.info('Mongoose connection open to ' + url));
    conn.on('error', (err) =>  log.error('Mongoose connection error: ' + err));
    conn.on('disconnected', () => log.error('Mongoose connection disconnected'));  
    allConnections[url] = conn;
  }
  else {
    log.info('reusing existing connection for ' + url);
  }
  return conn;
}

@raythree рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ .on('error') ред рдпрджрд┐ рдЖрдк рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╕ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛

let conn;
for (let i = 0; i < numRetries; ++i) {
  try {
    conn = await mongoose.createConnection(uri);
    break;
  } catch (error) {}
}

@vkarpov15 рдЖрдкрдХреЛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдореЗрдВ рджреЗрд░реА рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рдо 4.11.14 рдФрд░ 4.13.4 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

@jorgecuesta mongoose.connect(uri).catch(err => {})

@ vkarpov15 рдХрдиреЗрдХреНрдЯ () рд░рд┐рдЯрд░реНрди рдХрдиреЗрдХреНрд╢рди рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕рд╣реА рд╣реИ?

const connection = mongoose.connect(uri || undefined, {useMongoClient: true});
connection.once('error', (e) => {
  console.error(e, 'mongoose connection error.');
});
connection.once('connected', () => {
  console.log('mongoose connected');
});

5.0.0 рдореЗрдВ рд╣рдордиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рддрд╛рдХрд┐ mongoose.connect() рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рдПред 4.x рдореЗрдВ рдпрд╣ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди .then() рдФрд░ .catch() рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ await рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ

рд╣рд╛рдп @joeytwiddleред

рдореБрдЭреЗ рд╣реЗрд░реЛрдХреВ рдореЗрдВ рддреИрдирд╛рддреА рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]

12 рдЬреБрд▓рд╛рдИ, 2017 рдХреЛ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдЖрдкрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб/рд╕рдорд╛рдзрд╛рди рджрд┐рдпрд╛ред рдореИрдВ рдиреЗрд╡рд▓рд╛/рдиреЛрдб рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╣реВрдБред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ createConnection рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореИрдВ рдиреЗрд╡рд▓рд╛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ: ^5.0.10, рдиреЛрдб: v9.4.0
рдЪрд┐рдпрд░реНрд╕

@juancarlucci рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдиреЗрд╡рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

@joeytwiddle рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдЪреАрдпрд░реНрд╕ред

рдЬрдм рдореИрдВ рдореЛрдВрдЧреЛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ:

connection error: { MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connection 0 to localhost:27017 timed out]
    at Pool.<anonymous> (/home/wasd_xyz/Desktop/test/node_modules/mongodb-core/lib/topologies/server.js:505:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/home/wasd_xyz/Desktop/test/node_modules/mongodb-core/lib/connection/pool.js:329:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/home/wasd_xyz/Desktop/test/node_modules/mongodb-core/lib/connection/connection.js:256:10)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
    at Socket._onTimeout (net.js:420:8)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
  name: 'MongoNetworkError',
  message: 'failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connection 0 to localhost:27017 timed out]' }
(node:5453) UnhandledPromiseRejectionWarning: MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connection 0 to localhost:27017 timed out]
    at Pool.<anonymous> (/home/wasd_xyz/Desktop/test/node_modules/mongodb-core/lib/topologies/server.js:505:11)
    at emitOne (events.js:116:13)
    at Pool.emit (events.js:211:7)
    at Connection.<anonymous> (/home/wasd_xyz/Desktop/test/node_modules/mongodb-core/lib/connection/pool.js:329:12)
    at Object.onceWrapper (events.js:317:30)
    at emitTwo (events.js:126:13)
    at Connection.emit (events.js:214:7)
    at Socket.<anonymous> (/home/wasd_xyz/Desktop/test/node_modules/mongodb-core/lib/connection/connection.js:256:10)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
    at Socket._onTimeout (net.js:420:8)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)
(node:5453) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:5453) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.


рд╕реБрдбреЛ рд╕реЗрд╡рд╛ рдореЛрдВрдЧреЛрдбрдм рд╕реНрдерд┐рддрд┐

тЧП mongodb.service - MongoDB Database
   Loaded: loaded (/etc/systemd/system/mongodb.service; enabled; vendor preset: 
   Active: active (running) since Sat 2018-06-23 17:13:28 IST; 13min ago
     Docs: https://docs.mongodb.org/manual
 Main PID: 4224 (mongod)
    Tasks: 24 (limit: 4915)
   CGroup: /system.slice/mongodb.service
           тФФтФА4224 /usr/bin/mongod --quiet --config /etc/mongod.conf

Jun 23 17:13:28 Inspiron5370 systemd[1]: Started MongoDB Database.


@pranshuchittora рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА MongoDB рдХреЙрдиреНрдлрд╝рд┐рдЧ рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреЛрд░реНрдЯ 27017 рд╣реИред рд╕рд╛рде рд╣реА, рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рдмрдЬрд╛рдп 127.0.0.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рдмрдЬрд╛рдп рдЖрдИрдкреА рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред

 let local = "mongodb://127.0.0.1:27017/XXX";
      mongoose.connect(
        local,
        { useNewUrlParser: true }
      );

рдпрджрд┐ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдРрдк/рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреАрдмреА рдЪрд▓ рд░рд╣рд╛ рд╣реИ):

рдиреЗрд╡рд▓рд╛@5.3.16
@types/ [email protected]
@types/ [email protected]

async function waitForMongoDBStart(uri: string, timeoutMs: number) {

    return new Promise( async (resolve, reject) => {

        let endTime = Date.now() + timeoutMs;


        while (true) {

            let connectionError: Error;

            function errorHandler(err: Error) {
                connectionError = err;
            }
            mongoose.connection.once("error", errorHandler);

            await mongoose.connect(uri, {
                connectTimeoutMS: 5000, // This timeout applies only after connected & connection lost
                useNewUrlParser: true,
                useFindAndModify: false
            });

            // Time for error event propagation
            await wait(0);

            if ( ! connectionError) {
                mongoose.connection.removeListener("error", errorHandler);
                return resolve(); // All OK, connected
            }

            if (connectionError.name !== "MongoNetworkError") {
                return reject(`Unable to connect mongoDB. Details: ${connectionError}`);
            }

            if (Date.now() > endTime) {
                return reject(`Unable to connect mongoBD in ${timeoutMs} ms. Details: ${connectionError}`);
            }

        }

    });
}

@ vkarpov15 рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред https://mongoosejs.com/docs/connections.html рд╕реЗ :

connectTimeoutMS - How long the MongoDB driver will wait 
before failing its initial connection attempt. 
Once Mongoose has successfully connected, connectTimeoutMS is no longer relevant.

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред failed to connect to server рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдпрд╣ рддреБрд░рдВрдд рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдореЛрдВрдЧреЛрдбреАрдмреА рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рддреЛ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдЬреИрд╕реЗ reconnectOnInitialFail рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ false

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ vkarpov15 рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ -
ConnectImeoutMS рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рдж рд╣реА рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ (рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдкрд░)
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдбреАрдмреА рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рддрддреНрдХрд╛рд▓
рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреА рдЧрдИ рд╣реИ)

рд╕реЛрдмред, 22 рдЬреАрдпреВ 2018 рдУ 13:03 рджрд┐рдорд┐рддреНрд░реА рдХрд┐рд░рд┐рд▓реБрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рдирдкрд┐рд╕рд╛: (рдП):

рдпрджрд┐ рдпрд╣ рдореЛрдВрдЧреЛрдбреАрдмреА рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛
рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреИрд╕реЗ reconnectOnInitialFail рдЬреЛ рдЧрд▓рдд рд╣реЛрдЧрд╛
рдЪреВрдХ рдЬрд╛рдирд╛

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Automattic/mongoose/issues/5169#issuecomment-449565468 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABY-TjgeI2UqVca050y5YY3zi6w7nMkfks5u7h-vgaJpZM4M-1ur
.

--
рд╡реЛрдЬреНрд╢рд┐рдПрдХ рдлрд╝рд┐рджреЗрд░реЗрдХ

рдореЛрдмрд╛рдЗрд▓: +48 516 661 428

рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХрдиреЗрдХреНрдЯрдЯрд╛рдЗрдордЖрдЙрдЯрдПрдордПрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдУрдПрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдкрд░ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрд╛рдж ConnectTimeoutMS рдХрдм рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ?

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдореИрдВ Windows 10 рдФрд░ рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ (рд╕рдВрд╕реНрдХрд░рдг рдЕрдЬреНрдЮрд╛рдд) рдкрд░ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ mongod рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ рддрддреНрдХрд╛рд▓ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЛрдВрдЧреЛрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЕрднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг? рдХреЛрдИ рднреА?

@fider @Jokero рдореИрдВрдиреЗ рдЖрдЧреЗ рдЦреЛрд▓рд╛, рдФрд░ рдореИрдВ рд╕рд╣реА рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ, connectTimeoutMS рдХреЗрд╡рд▓ рддрдм рддрдХ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдЬрдм рддрдХ рдЖрдк рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрдиреЗрдХреНрд╢рди рдирд╣реАрдВ рдмрдирд╛рддреЗ, socketTimeoutMS рдмрд╛рдж рдореЗрдВ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд▓реЗрддрд╛ рд╣реИред рдпрд╣рд╛рдБ MongoDB рдбреНрд░рд╛рдЗрд╡рд░ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб рд╣реИ:

connectTimeoutMS рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ DNS рддреНрд░реБрдЯрд┐ рдпрд╛ рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЕрд╕реНрд╡реАрдХреГрдд рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, рдПрдХ рдЯреАрд╕реАрдкреА рд╕рд░реНрд╡рд░ рдЦреЛрд▓реЗрдВ рдЬреЛ рдПрдХ рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рд╕реБрдирддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

const net = require('net');

const server = net.createServer();

server.listen(27055);

рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ connectTimeoutMS рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ:

const assert = require('assert');
const mongoose = require('mongoose');
mongoose.set('debug', true);

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb://localhost:27055', {
    useNewUrlParser: true,
    connectTimeoutMS: 1000,
    socketTimeoutMS: 25000
  });
} 
$ time node gh-5169.js 
MongoNetworkError: connection 0 to localhost:27055 timed out
    at Socket.<anonymous> (/mongoose/node_modules/mongodb-core/lib/connection/connection.js:259:7)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:106:13)
    at Socket.emit (events.js:208:7)
    at Socket._onTimeout (net.js:407:8)
    at ontimeout (timers.js:475:11)
    at tryOnTimeout (timers.js:310:5)
    at Timer.listOnTimeout (timers.js:270:5)

real    0m2.293s
user    0m0.271s
sys 0m0.043s
$ 

рдХрднреА-рдХрднреА рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг, MongoDB url рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ/рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реНрд░реЛрдд рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

https://stackoverflow.com/questions/47958683/cannot-connect-to-mongodb-atlas-through-mongo-shell?answertab=active#tab -top

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдмрдВрдз рдмрдирд╛рддреЗ рд╕рдордп, (рдХрдо рд╕реЗ рдХрдо) рддреАрди рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:

  1. рдПрдХ рдореЛрдВрдЧреЛрдбрдм рд╣реИ рдФрд░ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛рдп!

  2. рд╕рд░реНрд╡рд░ "рдХрдиреЗрдХреНрд╢рди рдЕрд╕реНрд╡реАрдХреГрдд" рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рдкреЛрд░реНрдЯ рдкрд░ рдХреЛрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрдирдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдПрдХ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рд╣реИ рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдХреЛ _рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрддрд╛ рд╣реИред (рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рддреБрд░рдВрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд┐рдбрд░ рдпрд╣реА рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рдерд╛ред)

  3. рд╕рд░реНрд╡рд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдпрд░рд╡реЙрд▓ _рдкреИрд╕реЗрд╕рд┐рд╡рд▓реА рдЧрд┐рд░рд╛ рд╣реБрдЖ_ рдкреИрдХреЗрдЯ рдпрд╛ рдЙрд╕ рдЖрдИрдкреА рдкрддреЗ рдкрд░ рдХреЛрдИ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИред (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, vkarpov рдХрд╛ connectTimeoutMS рдЕрдВрддрддрдГ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред)

рддреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣рдореЗрд╢рд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рджрд┐рдП рдЧрдП рд╕рдордп рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рди рд╣реЛред

рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдореЗрдВ рдЖрдо рд╣реИ, рдФрд░ рдХрд┐рд╕реА рдЕрд╕рд╣рдпреЛрдЧреА рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдмрд╛рдд рдХрд░рддреЗ рд╕рдордп рднреАред рдЖрдкрдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ: "рдирд╣реАрдВ!" рддрдерд╛ .....

рдареЛрд╕ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг @joeytwiddle рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж: +1:

mongodb+srv рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЬрдм рдореЗрд░рд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯ рд░реЛрд▓рд┐рдВрдЧ рдкреБрдирд░рд╛рд░рдВрдн рдкрд░рд┐рджреГрд╢реНрдп (рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдкрдбреЗрдЯ) рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ connect ECONNREFUSED 34.238.xxx.xxx:27017 рдЬреИрд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рдиреА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

@esetnik рдХреНрдпрд╛ рдЖрдк useUnifiedTopology: true рдФрд░ Mongoose 5.7.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рд╣рдордиреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ #8209 рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред

@vkarpov15 рд╣рд╛рдБ рдореИрдВ рд╣реВрдБ! рдкрд╛рд░рд┐рддреЛрд╖рд┐рдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдПрдХреАрдХреГрдд рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдКрдВрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдирдорд╕реНрддреЗред рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдареАрдХ рд╡реИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ?!

@fdmxfarhan рдХреГрдкрдпрд╛ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕