【问题标题】:MongoDB Environment Variables Error, Unsure How to ProceedMongoDB 环境变量错误,不确定如何继续
【发布时间】:2021-11-12 02:23:26
【问题描述】:

我正在尝试学习全栈 Web 开发,并且正在尝试将 MongoDB 数据库设置为本地 ENV 变量,但我遇到了问题。我不知道如何将.env 文件连接到我的server.js 文件。

我的.env 文件如下所示:

DATABASE_URL=mongodb://localhost/mybary

server.js 看起来像这样:

if (process.env.NODE_ENV !== 'production') {
    require('dotenv').parse()
  }
  
  const express = require('express')
  const app = express()
  const expressLayouts = require('express-ejs-layouts')
  
  const indexRouter = require('./routes/index')
  
  app.set('view engine', 'ejs')
  app.set('views', __dirname + '/views')
  app.set('layout', 'layouts/layout')
  app.use(expressLayouts)
  app.use(express.static('public'))
  
  const mongoose = require('mongoose')
  mongoose.connect(process.env.DATABASE_URL, { useNewUrlParser: true })
  const db = mongoose.connection
  db.on('error', error => console.error(error))
  db.once('open', () => console.log('Connected to Mongoose'))
  
  app.use('/', indexRouter)
  
  app.listen(process.env.PORT || 3000)

它会抛出这个错误:

src.toString().split(NEWLINES_MATCH).forEach(function (line, idx) {
      ^

TypeError: Cannot read properties of undefined (reading 'toString')
    at Object.parse (C:\Users\tangc\Desktop\site\node_modules\dotenv\lib\main.js:43:7)
    at Object.<anonymous> (C:\Users\tangc\Desktop\site\server.js:4:23)

我相信问题出在require('dotenv').parse() 的第二行,因为我不相信我使用的正确,因为当服务器代码看起来像这样时它可以工作(硬编码 url):

const express = require('express')
  const app = express()
  const expressLayouts = require('express-ejs-layouts')
  
  const indexRouter = require('./routes/index')
  
  app.set('view engine', 'ejs')
  app.set('views', __dirname + '/views')
  app.set('layout', 'layouts/layout')
  app.use(expressLayouts)
  app.use(express.static('public'))
  
  const mongoose = require('mongoose')
  mongoose.connect('mongodb://localhost/mybary', { useNewUrlParser: true })
  const db = mongoose.connection
  db.on('error', error => console.error(error))
  db.once('open', () => console.log('Connected to Mongoose'))
  
  app.use('/', indexRouter)
  
  app.listen(process.env.PORT || 3000)

我在网络上找不到解决此问题的方法。如果有什么不明白的,欢迎评论。

【问题讨论】:

  • src.toString() 出现错误 - 您的整个代码不包含任何 src 值/变量。因此,错误 "Cannot read properties of undefined" 听起来合乎逻辑。

标签: node.js mongodb express mongoose environment-variables


【解决方案1】:

首先 - 确保您的 .env 文件位于项目的根目录中。

第二 - 在您的代码中尽可能早地要求 dotenv require("dotenv").config();

第三 - 您的 .env 文件中不应有任何空格。所以DATABASE_URL = mongodb://localhost/mybary 应该是DATABASE_URL=mongodb://localhost/mybary

编辑: .parse() 是解析您的 .env 文件的引擎。我不明白您为什么要使用它,除非您想覆盖 .env 文件,就像文档中提到的那样。

【讨论】:

  • 我试过了...没有任何改变
  • 我在问题部分包含了错误,这可能会有所帮助
  • 您是否将.parse() 替换为.config()
  • 这就是你的意思!谢谢,已经解决了!
  • 对不起,现在它给出了一个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. string. 错误
【解决方案2】:

如果使用node运行server.js,可以这样运行

node -r dotenv/config server.js 

export DATABASE_URL = mongodb://localhost/mybary
node server.js

仅供参考:导出服务器上的值,应该很容易管理不同的环境。例如,不同的服务器有不同的 ip 和数据库主机。我安装的时候不需要设置任何配置,直接覆盖即可。

【讨论】:

  • 不确定将导出语句放在哪里...
  • 我在问题部分包含了错误,这可能会有所帮助
  • 在命令行中导出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 2020-12-14
  • 2016-05-09
  • 2016-11-04
相关资源
最近更新 更多