警告:这不是从 heroku 访问配置变量的最安全方式。如果您有不希望受到攻击的非常敏感的密钥,那么请找到一种更安全的方法来执行此操作。
我使用 Heroku-Client API 从使用 node.js 的特定 heroku 应用程序中提取配置变量,并使用 get 请求将它们发送到前端。
//server.js
const express = require('express');
const http = require('http');
const path = require('path');
const Heroku = require('heroku-client')
const heroku = new Heroku({ token: process.env.API_TOKEN })
const app = express();
let API_KEY = '';
app.use(express.static(path.join(__dirname, 'dist')));
heroku.request({
method: 'GET',
path: 'https://api.heroku.com/apps/name-of-app/config-vars',
headers: {
"Accept": "application/vnd.heroku+json; version=3",
"Authorization": "Bearer "+process.env.API_TOKEN
},
parseJSON: true
}).then(response => {
//console.log(response, "heroku api...");
API_KEY = response.API_KEY;
})
app.get('/heroku-env', function(req, res){
res.json(TOKEN);
});
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/index.html'))
});
const port = process.env.PORT || '3001';
app.set('port', port);
const server = http.createServer(app);
server.listen(port, () => console.log(`Running on localhost:${port}`));
然后使用带有 HTTP 的服务来获取对前端的响应。
//EnvService.js
import { Injectable } from '@angular/core';
import { HttpClient, HttpResponse, HttpHeaders, HttpRequest } from '@angular/common/http'
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class EnvService{
env:Observable<any> = null;
constructor(private http:HttpClient){}
getEnv() {
console.log("trying to get heroku env...");
this.env = this.http.get('/heroku-env')
return this.env;
}
}
将服务导入 app.module 然后订阅组件中的 res 以访问配置变量。
//my.component.js
import { Component, ViewChild, Inject } from '@angular/core';
import { EnvService } from './env.service';
@Component({
selector: 'my-component',
templateUrl: './my.component.html',
styleUrls: ['./my.component.css']
})
export class MyComponent {
defineToken: string = '';
constructor(private envService: EnvService) {}
loadEnv() {
this.envService
.getEnv().subscribe(res => {
this.token = res;
})
}
ngOnInit() {
this.loadEnv();
}
}
参考:https://github.com/heroku/node-heroku-client