【发布时间】: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