首页 > 解决方案 > 我在访问 NodeJS 中的环境变量时遇到问题

问题描述

好吧,我有 3 种类型的环境(即开发、测试、生产)正在使用带有 express 的 nodejs。我的问题是我的开发和生产脚本都无法运行,因为它们无法访问我在网上搜索过的 .env 变量,但我找不到有用的东西。这就是我所做的,我创建了 .env 文件并将变量放入其中。我尝试使用导出命令,即export key=value。请帮忙

我创建了一个 .env 文件并添加了开发数据库 url 和生产数据库 url,但是当我运行任何一个环境时它都不起作用。我也尝试使用导出命令export key=value。但它工作了一段时间,然后又失败了。

//my config
require('dotenv').config();
module.exports ={
    development :{
        use_env_variable: process.env.DEVELOPMENT_URL,
        dialect: 'postgres'
    },
    production :{
        use_env_variable:process.env.PRODUCTION_URL,
        dialect: 'postgres',

    }
}
//my package.json scripts

{
  "name": "report_deck",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "export NODE_ENV=production && sequelize db:migrate && node ./build/index.js",
    "dev": "nodemon --exec babel-node ./api/index.js",
    "test": "export NODE_ENV=test &&  sequelize db:migrate:undo:all  && sequelize db:migrate  && nyc --require @babel/register  mocha ./api/test/test.js --timeout 20000 --exit",
    "build": "rm -rf ./build && babel -d ./build ./api -s",
    "generate-lcov": "nyc report --reporter=text-lcov > lcov.info",
    "coveralls-coverage": "coveralls < lcov.info",
    "codeclimate-coverage": "codeclimate-test-reporter < lcov.info",
    "coverage": "nyc npm test && npm run generate-lcov && npm run coveralls-coverage && npm run codeclimate-coverage"
  },

}
//.env
DEVELOPMENT_URL=postgres://example1:pass@example:5432/dbname
PRODUCTION_URL=postgres://example2:pass@example:5432/dbname
//my index.js
import express from 'express';
import bodyParser from 'body-parser';
import classRoutes from './server/routes/classRouter';
// all routes
import cors from 'cors';
const app = express();
app.use(bodyParser.json());
app.use(cors());
//use all routes
app.use(bodyParser.urlencoded({ extended: false }));

const port = process.env.PORT || 8003;

app.get('*', (req, res) => res.status(200).send({
    message: "Entrance"
}));

app.listen(port, () => {
    console.log("Entrance done, We are running at port " + port);
});


export default app;

期望:它应该记录“我们在端口 8003 上运行的入口”(npm run dev)它应该记录“我们在端口 5000 上运行的入口”(heroku 本地网络)实际:抛出新的 TypeError('Parameter “url " 必须是字符串,而不是 ' + typeof url);

标签: node.js

解决方案


您应该添加-r dotenv/config到您的起始脚本以预加载 dotenv =>

    "start": "export NODE_ENV=production && sequelize db:migrate && node -r dotenv/config ./build/index.js",

检查文档


推荐阅读