【问题标题】:MongooseError: The `uri` parameter to `openUri()` must be a stringMongooseError:`openUri()` 的`uri` 参数必须是字符串
【发布时间】:2019-10-05 17:33:06
【问题描述】:

我的代码有问题 我使用了这个代码 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...

谁能帮帮我,我看了一些帖子,但没有一个有帮助

【问题讨论】:

  • 所以process.env.MONGO_URL 可能不是字符串?
  • @Justinas Ofcurse 这是一个字符串,为什么不是
  • 因为错误状态直接指向该函数调用:Make sure the first parameter to mongoose.connect() or mongoose.createConnection() is a string
  • @Justinas 你是对的,我把它改成了:mongodb+srv://blur:blur@nodeapi-pfnvf8.mongodb.net/test?retryWrites=true 它确实有效
  • 所以请删除问题

标签: javascript node.js mongoose


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案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')
    

    【讨论】:

      【解决方案3】:

      需要像这样的 dotenv。它对我有用

      require('dotenv').config();
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 非常感谢,我浪费了 4 个小时来复制粘贴这个文件
        【解决方案5】:

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

        修复正在运行:heroku addons:create mongolab:sandbox

        如果需要 heroku push origin master,那么 heroku config 现在应该显示您的 .env 变量。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-22
          • 2021-03-24
          • 2023-02-11
          • 2020-03-06
          • 1970-01-01
          • 2023-03-31
          • 2019-08-11
          • 2022-11-16
          相关资源
          最近更新 更多