#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. экспорт в командной строке