首页 > 解决方案 > 如何在 index.js 中包含给定模式

问题描述

我在 config.js 中有这个给定的模块。我想包括这是我的 index.js。我尝试了多种方法,但配置变量始终未定义。我试过这样。

const config = require('./config') //undefined
const config = require('./config')("dev") //error
const config = require('./config')["dev"] // error
const config = require('./config').get("dev")

这是我如何运行它

// my command.
 npm run start:dev

"scripts": {
    "start:prod": "set NODE_ENV=prod pm2 start index.js --watch",
    "start:dev": "set NODE_ENV=dev && node index.js"
  },

这是模块

let env = process.env.NODE_ENV; 
require('dotenv').config();
const dev = {
    app: {
        port: parseInt(process.env.DEV_APP_PORT) || 3000
    },
    db: {
        host: process.env.DEV_DB_HOST || 'localhost',
        port: parseInt(process.env.DEV_DB_PORT) || 27017,
        name: process.env.DEV_DB_NAME || 'myDB',

    },
    imagePath: "./profileImages/",
    LogFillePath: "logs/combined.log",
    ErrorFilePaht: "logs/error.log",
    JwtSecret: process.env.JWT_SECRET
};
const prod = {
    app: {
        port: parseInt(process.env.PROD_APP_PORT) || 9000
    },
    db: {
        host: process.env.PROD_DB_HOST || 'localhost',
        port: parseInt(process.env.PROD_DB_PORT) || 27017,
        name: process.env.PROD_DB_NAME || 'myDB'
    },
    imagePath: "./profileImages/",
    LogFillePath: "logs/combined.log",
    ErrorFilePaht: "logs/error.log",
    JwtSecret: process.env.JWT_SECRET
};

const config = {
    dev,
    prod
};

module.exports = config[env];

我在 config.js 中有这个给定的模块。我想包括这是我的 index.js。我尝试了多种方法,但配置变量始终未定义。我试过这样。

标签: node.js

解决方案


为您尝试这样的事情config.js

require("dotenv").config();

const dev = {
  // ...
};
const prod = {
  // ...
};

const configs = {
  dev,
  prod,
};

const config = configs[process.env.NODE_ENV];

if (!config) throw new Error("No valid configuration found, ensure your NODE_ENV is properly set");

module.exports = config;

然后你可以简单地

const config = require('./config');

推荐阅读