{"record":{"id":"e067d92c385bcfad","repo":"mongodb/node-mongodb-native","slug":"proxy-options-cannot-be-specified-multiple-times-i","errorCode":null,"errorMessage":"Proxy options cannot be specified multiple times in the connection string","messagePattern":"Proxy options cannot be specified multiple times in the connection string","errorType":"exception","errorClass":"MongoParseError","httpStatus":null,"severity":"error","filePath":"src/connection_string.ts","lineNumber":523,"sourceCode":"    !mongoOptions.proxyHost &&\n    (mongoOptions.proxyPort || mongoOptions.proxyUsername || mongoOptions.proxyPassword)\n  ) {\n    throw new MongoParseError('Must specify proxyHost if other proxy options are passed');\n  }\n\n  if (\n    (mongoOptions.proxyUsername && !mongoOptions.proxyPassword) ||\n    (!mongoOptions.proxyUsername && mongoOptions.proxyPassword)\n  ) {\n    throw new MongoParseError('Can only specify both of proxy username/password or neither');\n  }\n\n  const proxyOptions = ['proxyHost', 'proxyPort', 'proxyUsername', 'proxyPassword'].map(\n    key => urlOptions.get(key) ?? []\n  );\n\n  if (proxyOptions.some(options => options.length > 1)) {\n    throw new MongoParseError(\n      'Proxy options cannot be specified multiple times in the connection string'\n    );\n  }\n\n  mongoOptions.mongoLoggerOptions = MongoLogger.resolveOptions(\n    {\n      MONGODB_LOG_COMMAND: process.env.MONGODB_LOG_COMMAND,\n      MONGODB_LOG_TOPOLOGY: process.env.MONGODB_LOG_TOPOLOGY,\n      MONGODB_LOG_SERVER_SELECTION: process.env.MONGODB_LOG_SERVER_SELECTION,\n      MONGODB_LOG_CONNECTION: process.env.MONGODB_LOG_CONNECTION,\n      MONGODB_LOG_CLIENT: process.env.MONGODB_LOG_CLIENT,\n      MONGODB_LOG_ALL: process.env.MONGODB_LOG_ALL,\n      MONGODB_LOG_MAX_DOCUMENT_LENGTH: process.env.MONGODB_LOG_MAX_DOCUMENT_LENGTH,\n      MONGODB_LOG_PATH: process.env.MONGODB_LOG_PATH\n    },\n    {\n      mongodbLogPath: mongoOptions.mongodbLogPath,\n      mongodbLogComponentSeverities: mongoOptions.mongodbLogComponentSeverities,","sourceCodeStart":505,"sourceCodeEnd":541,"githubUrl":"https://github.com/mongodb/node-mongodb-native/blob/dce7939f86fb283e167ad709955abedb7bf23124/src/connection_string.ts#L505-L541","documentation":"Thrown by MongoParseError at src/connection_string.ts:523 when any of the four proxy options (`proxyHost`, `proxyPort`, `proxyUsername`, `proxyPassword`) appears more than once in the URI query string. URL options have single-value semantics for proxy settings, so duplicates are rejected.","triggerScenarios":"URI `...?proxyHost=a&proxyHost=b`, or `?proxyPort=1080&proxyPort=1081`, etc. Often caused by URL-building libraries that append the same key twice.","commonSituations":"QueryString string concatenation that appends a default and an override; a config layer merging two URI fragments without deduplication.","solutions":["Ensure each proxy option appears at most once in the URI query string.","Prefer passing proxy settings via the MongoClient options object (where later keys naturally override earlier ones) instead of hand-building the query string."],"exampleFix":"// before\nnew MongoClient('mongodb://host:27017/?proxyHost=a&proxyHost=b')\n\n// after\nnew MongoClient('mongodb://host:27017/', { proxyHost: 'b', proxyPort: 1080 })","handlingStrategy":"validation","validationCode":"function assertNoDupProxyKeys(uri) {\n  const qs = uri.split('?')[1] || '';\n  const seen = new Set();\n  for (const kv of qs.split('&')) {\n    const k = kv.split('=')[0];\n    if (['proxyHost','proxyPort','proxyUsername','proxyPassword'].includes(k)) {\n      if (seen.has(k)) throw new Error(`Proxy option ${k} duplicated in URI.`);\n      seen.add(k);\n    }\n  }\n}","typeGuard":null,"tryCatchPattern":"try { new MongoClient(uri); } catch (e) { if (e instanceof MongoParseError && /Proxy options cannot be specified multiple times/.test(e.message)) { /* rebuild URI with deduped query string */ } else throw e; }","preventionTips":["Build query strings with URLSearchParams or an options object rather than string concatenation.","Deduplicate keys before passing the URI to the driver."],"tags":["connection-string","proxy","socks","url-parsing"],"backgroundTag":null,"analyzedSha":"dce7939f86fb283e167ad709955abedb7bf23124","analyzedAt":"2026-08-11T04:54:53.215Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}