簡體   English   中英

我在訪問NodeJS中的env變量時遇到問題

[英]i have an issue accessing env variables in NodeJS

好吧,我有3種類型的環境(即開發,測試,生產)都在使用nodejs和express。 我的問題是,我的開發和生產腳本都無法運行,因為它們無法訪問我在網上搜索的.env變量,但是找不到有用的東西。 這就是我所做的,我創建了.env文件並將其放入。我嘗試使用export命令,即export key=value 請幫忙

我創建了一個.env文件,並添加了開發數據庫url和生產數據庫url中的任何一個,但是當我在任何一個環境中運行時都無法正常工作。 我也嘗試使用export命令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上完成了入口”。 “必須是字符串,而不是'+ typeof url);

您應該在開始腳本中添加-r dotenv/config以預加載dotenv =>

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

檢查文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM