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

时间:2019-05-18 20:01:33

标签: javascript node.js mongoose

我的代码有问题,我在 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: ");
});

env.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...

有人可以帮我吗,我读了几篇文章,但都没有帮助

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

将您的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')

答案 2 :(得分:1)

首先,env 文件应该保存为 .env 而不是 env.txt,.txt 是文本文件的扩展名。

另外,我认为您没有将您的项目命名为“test”,因此请务必将其更改为您当前的项目名称。

如果仍然出现错误,请不要使用环境变量,而是在 mongoose.connect() 内用双引号或单引号添加整个 mongodb 路径。

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

答案 3 :(得分:0)

我也遇到了同样的错误,由于未设置环境变量MONGODB_URI并运行了heroku config而返回的cli中没有任何变量,因此崩溃了。

修复程序正在运行:heroku插件:创建mongolab:沙盒

如果需要heroku推送源主服务器,那么heroku配置现在应该显示您的.env变量。

答案 4 :(得分:0)

需要这样的dotenv。对我有用

require('dotenv').config();