Невозможно загрузить переменные окружения при запуске сервера с типами сценариев и node.js - PullRequest
0 голосов
/ 18 октября 2019

Я создаю сервер node.js с использованием машинописного текста, структура проекта выглядит следующим образом:

|--node_modules
|--server
   .env
   |-- build
   |-- src
       |-- database
       |-- controllers
       |-- models
       |-- routes
       |-- utils
       |-- app.ts
       |-- server.ts

app.ts:

import bodyParser from "body-parser";
import cors from "cors";
import { config } from "dotenv";
import express, { Express } from "express";
config({ path: __dirname + "../.env" });
import db from "./database/config";

db.once("open", () => logger.info("connected to the database"));

// checks if connection with the database is successful
db.on("error", console.error.bind(console, "MongoDB connection error:"));

const app: Express = express();
.
.
.

database / config.ts:

import mongoose from "mongoose";
import { logger } from "../utils/log";

const url = process.env.MONGODB_DEV_HOST;

mongoose
  .connect(url, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
    useCreateIndex: true,
    useFindAndModify: false
  })
  .then(() => {
    logger.info("Database starts successfully");
  })
  .catch((error) => {
    logger.error("Error when starting database: \n", error);
  });

const db = mongoose.connection;

export default db;

.env:

MONGODB_DEV_HOST=mongodb://localhost:27017/db

Когда я запускаю свой сервер, я получаю сообщение об ошибке из-за сервера mongodb, поскольку URL-адрес не определен. Я положил файл .env в корень проекта. Я что-то упускаю в своей конфигурации?

1 Ответ

0 голосов
/ 18 октября 2019

Попробуй так:

import {} from 'dotenv/config'

Почему это происходит? ,По сути, оператор import выполняется в глубоком поисковом обходе, прежде чем ваш код запускается, и в этот момент он устанавливает переменную env, которая, конечно, не определена в этой точке, и догадаетесь, когда вызывается ваш вызов конфигурации? В время выполнения . Это происходит потому, что import операторы очень отличаются от require операторов по дизайну. Вызов конфигурации непосредственно из оператора импорта в верхней части файла решает эту проблему.

...