В моем приложении NodeJS у меня есть файл .env в каталоге root со следующей информацией:
NODE_ENV = development
PORT = 3002
#db credentials
dbURL = 'mongodb+srv://username:password@clusterName-0gcm3.mongodb.net/dbName?retryWrites=true&w=majority'
И в каталоге root у меня также есть файл конфигурации (config. js), который захватывает переменные:
const dotenv = require('dotenv');
dotenv.config();
module.exports = {
port: process.env.PORT,
dbURL: process.env.dbURL
}
В моем приложении. js, которое снова находится в папке root. Я могу успешно прочитать этот файл и подключиться к БД:
const express = require('express');
const mongoose = require('mongoose');
const { port, dbURL } = require('./config'); //reading the config file and grabbing the vars
const app = express();
app.use(express.json());
//works well!
mongoose.connect(dbURL, { useUnifiedTopology: true, useNewUrlParser: true})
.then(res => {
console.log(`Listening on port ${port}`);
app.listen(port);
})
.catch(err => console.error(err));
Теперь я пытаюсь написать несколько автономных сценариев для заполнения БД некоторыми образцами данных, и в этом сценарии я пытаюсь подключиться к БД отдельно, поскольку эти сценарии будут выполняться только с командой node <file>
. Этот файл (dbPopulate. js) находится в папке / helper-scripts /. И сценарий выглядит так:
const express = require('express');
const mongoose = require('mongoose');
const {port, dbURL} = require('../config'); //attempting to read config.js that calls the .env file
const app = express();
app.use(express.json());
console.log(dbURL, port) //throws undefined for both vars
mongoose.connect(dbURL, { useUnifiedTopology: true, useNewUrlParser: true})
.then(res => {
console.log(`Listening on port ${port}`);
app.listen(port);
})
.catch(err => console.error(err));
Чтобы было понятно, это моя файловая структура:
/.env
/app.js
/config.js
/helper-scripts/dbPopulate.js (culprit)
ОБНОВЛЕНИЕ для отображения журнала ошибок:
Когда я выполнить dbPopulate. js standalone Я получаю следующие ошибки:
$ node dbPopulate.js
undefined undefined
C:\teamSIO\server\node_modules\mongoose\lib\connection.js:582
throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
^
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.
at NativeConnection.Connection.openUri (C:\teamSIO\server\node_modules\mongoose\lib\connection.js:582:11)
at Mongoose.connect (C:\teamSIO\server\node_modules\mongoose\lib\index.js:335:15)
at Object.<anonymous> (C:\teamSIO\server\helper-scripts\dbPopulate.js:30:10)
at Module._compile (internal/modules/cjs/loader.js:1123:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10)
at Module.load (internal/modules/cjs/loader.js:972:32)
at Function.Module._load (internal/modules/cjs/loader.js:872:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47