【问题标题】:MongoDB connection error in Digital Ocean dropletDigital Ocean 液滴中的 MongoDB 连接错误
【发布时间】:2021-06-25 10:38:33
【问题描述】:

我正在将我的 MERN 应用程序部署到 Digital Ocean droplet(Ubuntu 20.04 服务器)。

我已经将我的 GitHub 存储库克隆到了 droplet,使用 npm install 安装了依赖项。接下来,当我使用npm start 启动服务器时,我收到以下错误:

这个错误本质上是说mongoose.connect() 的第一个参数是未定义的,必须是一个字符串。但是,在我的本地机器上一切正常,当我 console.log process.env.MONGO_URI 时,我得到了连接字符串。

服务器/配置/db.js

const mongoose = require("mongoose");
const colors = require("colors");
const dotenv = require("dotenv");

dotenv.config();

const connectDB = async () => {
  try {
    const conn = await mongoose.connect(process.env.MONGO_URI, {
      useNewUrlParser: true,
      useCreateIndex: true,
      useUnifiedTopology: true,
    });
    console.log(`MongoDB connected: ${conn.connection.host}`.cyan.bold);
  } catch (error) {
    console.error(`Error: ${error.message}`.red.bold.underline);
    process.exit(1);
  }
};
2;
module.exports = connectDB;

为什么在我的 Digital Ocean droplet 中启动服务器时出现此错误?

【问题讨论】:

    标签: mongodb mongoose deployment environment-variables digital-ocean


    【解决方案1】:

    dotenv 不加载系统变量。

    创建.env 文件

    MONGO_URI=XXXXXXX
    

    https://github.com/motdotla/dotenv#usage

    在项目的根目录中创建一个 .env 文件。添加 NAME=VALUE 形式的新行上的环境特定变量。 例如:

    DB_HOST=localhost
    DB_USER=root
    DB_PASS=s1mpl3
    

    【讨论】:

    • 我的根目录中有.env 文件,并且该文件中有MONGO_URI
    • @HKS 也可以确定文件内容,console.log(process.env)
    • 当我在本地机器上控制台日志process.env.MONGO_URI 时,我得到了我在.env 文件中定义的连接字符串。我不知道为什么 MONGO_URI 在 droplet 中是未定义的。
    • @HKS 你能签入droplet 你.env 文件吗?
    • 我已将.env 放在.gitignore 中,这样它就不会被推送到Github。哦,是的,我明白问题出在哪里了。 .env 在 Droplet 中不可用。那么,我现在该怎么办?我无法将 .env 文件推送到 Github,因为我的密钥将被暴露。然后我如何将.env 文件带到Droplet?
    猜你喜欢
    • 1970-01-01
    • 2021-07-02
    • 2019-02-01
    • 1970-01-01
    • 2020-06-14
    • 2014-12-06
    • 2018-03-06
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多