MongooseError:`openUri()`的`uri`参数必须是字符串

wxclj1h5  于 2022-10-22  发布在  Go
关注(0)|答案(9)|浏览(160)

我的代码有问题,我在app.js中使用了此代码:

const mongoose = require('mongoose'); 
const dotenv = require('dotenv'); 
dotenv.config()

  mongoose.connect(process.env.MONGO_URL) 
.then(() => console.log("DB connected!"));

    mongoose.connection.on('error',function(err){   
console.log("The error is: ");
});

环境.txt:

MONGO_URL=mongodb+srv://blur:blur@nodeapi-pfnvf8.mongodb.net/test?retryWrites=true
PORT:8080

出于某种原因,它给了我一个奇怪的错误:

throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
    ^ MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.
    at new MongooseError (C:\Users\razei\Desktop\Recat\project2\node_modules\mongoose\lib\error\mongooseError.js:14:11)
    at NativeConnection.Connection.openUri (C:\Users\razei\Desktop\Recat\project2\node_modules\mongoose\lib\connection.js:465:11)
    at Mongoose.connect (C:\Users\razei\Desktop\Recat\project2\node_modules\mongoose\lib\index.js:289:15)
    at Object.<anonymous> (C:\Users\razei\Desktop\Recat\project2\ap.js:9:10)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3) [nodemon] app crashed - waiting for file changes before starting...

有人能帮我吗?我读了一些帖子,但没有一篇能帮上忙

b5buobof

b5buobof1#

当您没有将.env文件保存在根文件夹中时,也会发生这种情况。

slwdgvem

slwdgvem2#

将env文件保存为.env而不是env。txt,并确保它也在你的根文件夹中&看看它是否有效!MONGO_URI也是传统的命名约定,但这不重要。

mongoose
    .connect(process.env.MONGO_URL, {
        useNewUrlParser: true,
        useCreateIndex: true,
        useUnifiedTopology: true
    })
    .then(() => {
        console.log('Connected to Mongo!');
    })
    .catch((err) => {
        console.error('Error connecting to Mongo', err);
    });

此外,您可以使用下面的行简化上面的2个require语句,您应该尽快调用:

require('dotenv').config();
const mongoose = require('mongoose')
tjvv9vkg

tjvv9vkg3#

需要这样的dotenv。这对我很有用

require('dotenv').config();
ecbunoof

ecbunoof4#

首先,env文件应该保存为.env而不是env。txt是文本文件的扩展名。
此外,我认为您没有将项目命名为“test”,因此请确保将其更改为当前项目名称。
如果仍然出现错误,请不要使用环境变量,而是在mongoose.connect()中用双引号或单引号添加整个mongodb路径。

mongoose.connect(process.env.mongodb, {
    useUnifiedTopology: true,
    useNewUrlParser: true,
    useCreateIndex: true,
});
gojuced7

gojuced75#

我也遇到了同样的错误,由于环境变量MONGODB_URI没有设置,运行heroku config时cli中没有变量,所以它崩溃了。
修复程序正在运行:heroku addons:create mongolab:sandbox
如果需要heroku push origin master,那么heroku config现在应该显示您的.env变量。

3okqufwl

3okqufwl6#

当我们将数据库凭据放在.env文件中,并且在服务器的主文件中,我们在.env文件之前创建连接时,就会出现错误,相反,我们应该在需要.env之后创建连接。

wmtdaxz3

wmtdaxz37#

我也遇到了这个错误,您需要做的第一件事是将.env文件放在“根文件夹”中。这将解决您的问题。


小时

js4nwp54

js4nwp548#

出现了相同的错误..:
这对我也很有效。。
require('dotenv').config();
查看此帖子了解更多信息:https://dev.to/aritik/connecting-to-mongodb-using-mongoose-3akh

uurity8g

uurity8g9#

确保根文件夹位于config的位置。创建env,并为@app指定正确的路径。js=>dotenv。config(路径:“./config.env”)。
dotenv公司。config({路径:“./config.env”});

相关问题