Node.js 使用Heroku环境变量和angular cli,通过节点服务器部署
我非常喜欢Django在Heroku上使用dotenv变量的实现,并希望将其引入angular cli客户端(angular 2) 为了在Heroku上运行客户端,我通过运行express server的节点运行应用程序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.
如何在我的应用程序中读取Heroku的变量
这是推荐的做法还是我遗漏了什么 由于您的服务器是一个节点服务器,它有可能进行处理,而不仅仅是提供静态文件。这为您提供了许多选择
需要注意的重要一点是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?还不确定如何处理,但我会尝试解决这个问题。