Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用Heroku环境变量和angular cli,通过节点服务器部署_Node.js_Angular_Heroku_Environment Variables_Angular Cli - Fatal编程技术网

Node.js 使用Heroku环境变量和angular cli,通过节点服务器部署

Node.js 使用Heroku环境变量和angular cli,通过节点服务器部署,node.js,angular,heroku,environment-variables,angular-cli,Node.js,Angular,Heroku,Environment Variables,Angular Cli,我非常喜欢Django在Heroku上使用dotenv变量的实现,并希望将其引入angular cli客户端(angular 2) 为了在Heroku上运行客户端,我通过运行express server的节点运行应用程序 Node可以使用process.env.VARNAME访问Heroku的环境变量,但我不知道如何将这些变量传递给我的应用程序。 如何在我的应用程序中读取Heroku的变量 据我所知,在使用angular cli时,我应该使用environment.ts/environment.

我非常喜欢Django在Heroku上使用dotenv变量的实现,并希望将其引入angular cli客户端(angular 2)

为了在Heroku上运行客户端,我通过运行express server的节点运行应用程序

  • Node可以使用process.env.VARNAME访问Heroku的环境变量,但我不知道如何将这些变量传递给我的应用程序。
    如何在我的应用程序中读取Heroku的变量

  • 据我所知,在使用angular cli时,我应该使用environment.ts/environment.prod.ts文件来分离环境设置

    但是,我不想将这些变量上传到Bitbucket,这让我又开始质疑如何从Heroku的变量中设置这些变量(当然process.env.VARNAME不起作用…)


  • 这是推荐的做法还是我遗漏了什么

    由于您的服务器是一个节点服务器,它有可能进行处理,而不仅仅是提供静态文件。这为您提供了许多选择

  • 您可以使用NodeJS服务器处理的模板语言在提供环境变量之前将其嵌入HTML

  • 您可以拥有一个配置类型端点,该端点包含通常存储在环境变量中的配置。您的应用程序在启动时可以点击该端点并获取配置数据,以便以后使用

  • 这是我想到的前两个选择,但是有很多方法可以解决这个问题


    需要注意的重要一点是Angular是一个客户端javascript框架,这意味着没有安全性——任何发送到Angular的内容都可以被任何使用Angular应用程序的人读取。因此,重要的是,你不要依赖于你发送给你的信息的保密性

    警告:这不是从heroku访问配置变量的最安全的方法。如果您有非常敏感的密钥,您不希望受到攻击,那么请找到一种更安全的方法来执行此操作

    我使用Heroku客户端API使用node.js从特定的Heroku应用程序中引入配置变量,并使用get请求将它们发送到前端

    //server.js
    const express=require('express');
    const http=require('http');
    const path=require('path');
    常量Heroku=require('Heroku-client')
    const heroku=new heroku({token:process.env.API_token})
    常量app=express();
    让API_键=“”;
    使用(express.static(path.join(uu dirname,'dist'));
    希罗库请求({
    方法:“GET”,
    路径:'https://api.heroku.com/apps/name-of-app/config-vars',
    标题:{
    “接受”:“application/vnd.heroku+json;version=3”,
    “授权”:“持有人”+process.env.API_令牌
    },
    parseJSON:true
    })。然后(响应=>{
    //日志(响应,“heroku api…”);
    API_KEY=response.API_KEY;
    })
    app.get('/heroku env',函数(req,res){
    res.json(令牌);
    });
    应用程序获取(“*”,(请求,请求)=>{
    res.sendFile(path.join(uu dirname,'dist/index.html'))
    });
    const port=process.env.port | |“3001”;
    应用程序集(“端口”,端口);
    const server=http.createServer(app);
    server.listen(端口,()=>console.log(`Running on localhost:${port}`));
    
    然后使用带有HTTP的服务获取对前端的响应

    //EnvService.js
    从“@angular/core”导入{Injectable};
    从“@angular/common/http”导入{HttpClient,HttpResponse,HttpHeaders,HttpRequest}
    从“rxjs/Observable”导入{Observable};
    导入'rxjs/add/operator/map';
    @可注射()
    导出类服务{
    
    env:Observable

    您想向客户端注入哪些内容?无论是在环境中还是在源代码中,这些内容都不会安全,因为它们最终都会超出您对用户设备的控制。查看heroku:::环境:process.env.NODE|env|||'production',刚刚发现,这实际上是我需要的内容,但得到了我的回答不可能。有人知道该怎么做吗?“更好的选择可能是让你的Angular2应用程序在初始化时查询你的服务器”看起来很有希望,但是你如何让它与你的本地环境一起工作呢?我只是根据angular5进行了更新。当我在本地工作时,我使用实际的密钥,然后确保在提交并返回git和heroku之前用ENV vars替换它们。谢谢你的更新。你不认为如果我们可以使用dotenv模块t会很好吗o使用
    .env
    文件像处理任何其他heroku env一样处理本地env?还不确定如何处理,但我会尝试解决这个问题。