Ошибка переменных среды MongoDB, Не уверен, как действовать

#node.js #mongodb #express #mongoose #environment-variables

Вопрос:

Я пытаюсь изучить веб-разработку с полным стеком, и я пытаюсь настроить базу данных 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 =gt; console.error(error))  db.once('open', () =gt; 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:UserstangcDesktopsitenode_modulesdotenvlibmain.js:43:7)  at Object.lt;anonymousgt; (C:UserstangcDesktopsiteserver.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 =gt; console.error(error))  db.once('open', () =gt; console.log('Connected to Mongoose'))    app.use('/', indexRouter)    app.listen(process.env.PORT || 3000)  

Я не могу найти способ исправить это в Интернете. Если что-то не ясно, пожалуйста, прокомментируйте.

Комментарии:

1. Ошибка включена src.toString() — весь ваш код не содержит никакого src значения/переменной. Таким образом, ошибка «Не удается прочитать свойства неопределенного» звучит логично.

Ответ №1:

Во — первых, убедитесь, что ваш .env файл находится в корневом каталоге вашего проекта.

Второе — требуйте dotenv как можно более раннего включения в свой код require("dotenv").config();

В — третьих, в вашем файле не должно быть пробелов .env . Так DATABASE_URL = mongodb://localhost/mybary и должно быть DATABASE_URL=mongodb://localhost/mybary

ИЗМЕНИТЬ: .parse() Это механизм, который анализирует ваш .env файл. Я не понимаю, почему вы хотели бы использовать его, если только вы не хотите переопределить .env файл, как это указано в документах.

Комментарии:

1. Я попробовал… ничего не изменилось

2. Я включил ошибку в раздел вопросов, это может помочь

3. вы заменили .parse() .config() «кому»?

4. Вот что ты имел в виду! Спасибо, это все исправило!

5. Извините, теперь это выдает 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:

Если вы используете узел для запуска server.js, вы можете запустить его так

 node -r dotenv/config server.js   

или

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

К вашему сведению: Экспортируйте значения на сервер, должно быть легко управлять различными средами. Например, разные серверы имеют разные ip-адреса и узлы баз данных. Когда я устанавливаю его, мне не нужно устанавливать какую-либо конфигурацию, просто перезаписывайте.

Комментарии:

1. не уверен, куда поместить инструкцию по экспорту…

2. Я включил ошибку в раздел вопросов, это может помочь

3. экспорт в командной строке