【问题标题】:mongoose.connect() url argument must be of type stringmongoose.connect() url 参数必须是字符串类型
【发布时间】:2021-06-02 15:07:19
【问题描述】:

使用 mongoose.connect() 时出现以下错误

error: The "url" argument must be of type string. Received undefined {"data":{"code":"ERR_INVALID_ARG_TYPE"}}

我是这样使用的:

const mongoose = require("mongoose");
const url = process.env.MONGODB_URL;
mongoose.connect(url, {
  useNewUrlParser: true,
});

我也试过不带环境变量:

const mongoose = require("mongoose");
mongoose.connect("mongodb+srv://username:password@myurl.com/etc", {
  useNewUrlParser: true,
});

堆栈跟踪如下所示:

43|api-dev | TypeError [ERR_INVALID_ARG_TYPE]: The "url" argument must be of type string. Received undefined
43|api-dev |     at validateString (internal/validators.js:124:11)
43|api-dev |     at Url.parse (url.js:160:3)
43|api-dev |     at Object.urlParse [as parse] (url.js:155:13)
43|api-dev |     at dispatchHttpRequest (/var/www/api-dev/node_modules/axios/lib/adapters/http.js:91:22)
43|api-dev |     at new Promise (<anonymous>)
43|api-dev |     at httpAdapter (/var/www/api-dev/node_modules/axios/lib/adapters/http.js:46:10)
43|api-dev |     at dispatchRequest (/var/www/api-dev/node_modules/axios/lib/core/dispatchRequest.js:52:10)
43|api-dev |     at processTicksAndRejections (internal/process/task_queues.js:93:5)

好像是axios的错误,但是我没有直接调用axios。

它在我的本地环境中运行良好,无论是使用 env 变量还是原始字符串,但在我的服务器上却不行。想法?

*本例中的url字符串已被替换。我在生产中使用了正确的字符串。

【问题讨论】:

  • 您是否尝试在您的网络服务器中记录process.env.MONGODB_URL 的值?输出是什么?
  • 是的,我已经记录了它,它在控制台中显示了正确的值。不是“未定义”。但问题似乎不是process.env.MONGODB_URL,因为当我将原始url 字符串传递给mongoose.connect()url 参数时,我仍然收到错误消息。我认为我的问题与猫鼬在某处进行的 axios 调用有关。
  • 你用的是最新版的mongoose吗?在最新版本的mongoose 中,您的方式对我来说很好。
  • 我在猫鼬 5.11.18 上。我认为这个错误来自mongoose.connect 以外的其他地方,但我还没有找到它。这似乎是一个axios错误。我没有明确使用 axios,但我认为 mongoose 确实在幕后?
  • 我明白了。您是否尝试像在第二个示例中那样在原始 MongoDB URI 中添加引号?像'mongodb+srv://your-mongodb-string'。我注意到您没有在连接字符串中添加引号。它应该工作。如果可行,我将用它来回答这个问题。

标签: mongodb express mongoose axios


【解决方案1】:

问题是因为您忘记在 Mongoose 连接字符串中添加双引号。

答案应该是:

const mongoose = require("mongoose");
mongoose.connect("mongodb+srv://username:password@myurl.com/etc", {
  useNewUrlParser: true,
});

用双引号。

【讨论】:

  • 感谢您指出我丢失的双引号;它现在已在我的帖子中修复。我实际上已经尝试过了,但我仍然收到错误。
【解决方案2】:

结果证明这根本与 mongo.connect() 无关,而是我程序另一部分的环境变量中的拼写错误。

【讨论】:

    猜你喜欢
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2021-12-24
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多