Node/express 应用程序无法使用 mongoose 连接到 Mongodb Atlas

Node/express application failing to connect to Mongodb Atlas using mongoose

我有一个 node/express 应用程序,我正在尝试使用 mongoose 连接到 Mongodb Atlas。

我的所有代码都与我之前连接到 Atlas 的应用程序相同(运行良好)。当我 运行 它在我的工作机器 (Windows 10) 上时,一切都按预期工作。但是,当我在我的 MacBook Pro (Mojave) 上 运行 它时,Express 应用程序 运行s 但与 Atlas 的猫鼬连接会引发以下错误:

{ Error: queryTxt EBADNAME development-zv5hp.mongodb.net
    at QueryReqWrap.onresolve [as oncomplete] (dns.js:196:19)
  errno: 'EBADNAME',
  code: 'EBADNAME',
  syscall: 'queryTxt',
  hostname: 'development-zv5hp.mongodb.net' }

server.js

const express = require('express');
const mongoose = require('mongoose');

const app = express();

mongoose
  .connect(
    'mongodb+srv://client:<PASSWORD>@development-zv5hp.mongodb.net/shop',
    { useNewUrlParser: true }
  )
  .then(() => console.log('MongoDB Connected...'))
  .catch(err => console.log(err));

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

可能是什么导致了这个问题? 我已经检查了 Atlas 用户和密码并将我的 IP 列入白名单(实际上将所有 IP 列入白名单)

使用:

请添加 autoIndex: false 它对我有用

mongoose
  .connect(
    'mongodb+srv://client:<PASSWORD>@development-zv5hp.mongodb.net/shop',
    {autoIndex: false, useNewUrlParser: true }

使用Google的DNS服务器8.8.8.88.8.4.4可以解决这个问题

此错误是由于无法解析传递给连接的 URI 'mongodb+srv://client:<PASSWORD>@development-zv5hp.mongodb.net/shop' 引起的。您的 DNS 服务器不知道它,因此无法解析 IP。因此 ebadname.

change this like Addison mentioned