MongoDB 环境变量错误,不确定如何进行
MongoDB Environment Variables Error, Unsure How to Proceed
我正在尝试学习全栈网络开发,我正在尝试将 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)
我在网上找不到解决此问题的方法。有什么不明白的地方欢迎评论。
如果你使用节点运行 server.js,你可以运行这样
node -r dotenv/config server.js
或
export DATABASE_URL = mongodb://localhost/mybary
node server.js
仅供参考:导出服务器上的值,应该很容易管理不同的环境。比如不同的服务器有不同的ip和数据库主机。我安装的时候不需要设置任何配置,直接覆盖即可。
首先 - 确保您的 .env
文件位于项目的根目录中。
其次 - 在您的代码中尽可能早地要求 dotenv
require("dotenv").config();
第三 - 你的 .env
文件中不应该有任何空格。所以 DATABASE_URL = mongodb://localhost/mybary
应该是 DATABASE_URL=mongodb://localhost/mybary
编辑:
.parse()
是解析您的 .env
文件的引擎。我不明白你为什么要使用它,除非你想覆盖 .env
文件,就像文档中提到的那样。
我正在尝试学习全栈网络开发,我正在尝试将 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)
我在网上找不到解决此问题的方法。有什么不明白的地方欢迎评论。
如果你使用节点运行 server.js,你可以运行这样
node -r dotenv/config server.js
或
export DATABASE_URL = mongodb://localhost/mybary
node server.js
仅供参考:导出服务器上的值,应该很容易管理不同的环境。比如不同的服务器有不同的ip和数据库主机。我安装的时候不需要设置任何配置,直接覆盖即可。
首先 - 确保您的 .env
文件位于项目的根目录中。
其次 - 在您的代码中尽可能早地要求 dotenv
require("dotenv").config();
第三 - 你的 .env
文件中不应该有任何空格。所以 DATABASE_URL = mongodb://localhost/mybary
应该是 DATABASE_URL=mongodb://localhost/mybary
编辑:
.parse()
是解析您的 .env
文件的引擎。我不明白你为什么要使用它,除非你想覆盖 .env
文件,就像文档中提到的那样。