【问题标题】:i have an issue accessing env variables in NodeJS我在访问 NodeJS 中的环境变量时遇到问题
【发布时间】:2023-03-30 19:43:02
【问题描述】:

嗯,我有 3 种类型的环境(即开发、测试、生产)正在使用 nodejs 和 express。我的问题是我的开发和生产脚本都无法运行,因为它们无法访问我在网上搜索过的 .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;

期望: 它应该为(npm run dev)记录“我们正在端口 8003 上运行的入口完成” 它应该为(heroku 本地网络)记录“我们在端口 5000 上运行的入口已完成” 实际的: throw new TypeError('参数“url”必须是字符串,不能是' + typeof url);

【问题讨论】:

  • 希望你发布的那些钥匙是假的。
  • @ggorlen 这不是假的

标签: node.js


【解决方案1】:

您应该将 -r dotenv/config 添加到您的启动脚本中以预加载 dotenv =>

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

查看docs

【讨论】:

    猜你喜欢
    • 2020-02-07
    • 2020-05-14
    • 2014-05-20
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2021-05-19
    • 2015-09-20
    相关资源
    最近更新 更多