You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					62 lines
				
				1.9 KiB
			
		
		
			
		
	
	
					62 lines
				
				1.9 KiB
			| 
											3 years ago
										 | /*! | ||
|  |  * Module dependencies. | ||
|  |  */ | ||
|  | 
 | ||
|  | 'use strict'; | ||
|  | 
 | ||
|  | const MongooseError = require('./mongooseError'); | ||
|  | const allServersUnknown = require('../helpers/topology/allServersUnknown'); | ||
|  | const isAtlas = require('../helpers/topology/isAtlas'); | ||
|  | const isSSLError = require('../helpers/topology/isSSLError'); | ||
|  | 
 | ||
|  | /*! | ||
|  |  * ignore | ||
|  |  */ | ||
|  | 
 | ||
|  | const atlasMessage = 'Could not connect to any servers in your MongoDB Atlas cluster. ' + | ||
|  |   'One common reason is that you\'re trying to access the database from ' + | ||
|  |   'an IP that isn\'t whitelisted. Make sure your current IP address is on your Atlas ' + | ||
|  |   'cluster\'s IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/'; | ||
|  | 
 | ||
|  | const sslMessage = 'Mongoose is connecting with SSL enabled, but the server is ' + | ||
|  |   'not accepting SSL connections. Please ensure that the MongoDB server you are ' + | ||
|  |   'connecting to is configured to accept SSL connections. Learn more: ' + | ||
|  |   'https://mongoosejs.com/docs/tutorials/ssl.html'; | ||
|  | 
 | ||
|  | class MongooseServerSelectionError extends MongooseError { | ||
|  |   /** | ||
|  |    * MongooseServerSelectionError constructor | ||
|  |    * | ||
|  |    * @api private | ||
|  |    */ | ||
|  |   assimilateError(err) { | ||
|  |     const reason = err.reason; | ||
|  |     // Special message for a case that is likely due to IP whitelisting issues.
 | ||
|  |     const isAtlasWhitelistError = isAtlas(reason) && | ||
|  |       allServersUnknown(reason) && | ||
|  |       err.message.indexOf('bad auth') === -1 && | ||
|  |       err.message.indexOf('Authentication failed') === -1; | ||
|  | 
 | ||
|  |     if (isAtlasWhitelistError) { | ||
|  |       this.message = atlasMessage; | ||
|  |     } else if (isSSLError(reason)) { | ||
|  |       this.message = sslMessage; | ||
|  |     } else { | ||
|  |       this.message = err.message; | ||
|  |     } | ||
|  |     for (const key in err) { | ||
|  |       if (key !== 'name') { | ||
|  |         this[key] = err[key]; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     return this; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | Object.defineProperty(MongooseServerSelectionError.prototype, 'name', { | ||
|  |   value: 'MongooseServerSelectionError' | ||
|  | }); | ||
|  | 
 | ||
|  | module.exports = MongooseServerSelectionError; |