node.js - 我在访问 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);
解决方案
您应该添加-r dotenv/config
到您的起始脚本以预加载 dotenv =>
"start": "export NODE_ENV=production && sequelize db:migrate && node -r dotenv/config ./build/index.js",
检查文档
推荐阅读
- macos - 生成 mozilla-central 的调用图 - 运行 Valgrind 时出错:启动失败。找不到二进制文件
- machine-learning - Conv2d 的预期参数
- node.js - Mongoose - 仅按日期部分排序日期,忽略时间
- airflow - Airflow 中的 CeleryExecutor 没有并行化 subdag 中的任务
- sybase - 使用 isql Syabse 计算行数
- vba - VBA:复制单元格直到找到空单元格1004
- php - SQL查询组合
- python - 调用一个 python 函数,该函数将 MATLAB 函数句柄作为来自 matlab 的参数
- python - 子类实例在期望类实例的地方有效吗?
- r - ggplot中的字体系列不会改变