heroku node.js教程 - 将env变量发送到其他js页面

时间:2015-06-21 04:36:32

标签: javascript node.js heroku express environment-variables

所以我正在heroku页面上执行“getting started”。

通过克隆他们的教程回购,我决定将我自己的index.htmlapp.js文件添加到他们已经为我创建的/public文件夹中。

目录如下所示:

node-getting-started repo folder
| node_modules folder
| public folder
| | app.js
| | index.html
| index.js
| package.json
| Procfile

package.json的{​​{1}}指向main,如下所示:

index.js

index.js

此时,我要做的是将var express = require('express'); var app = express(); app.set('port', (process.env.PORT || 5000)); app.use(express.static(__dirname + '/public')); app.get('/', function(request, response) { var obj = { ... }; var secret_key = process.env.SECRET_KEY; // what should i do here to send the variables above to my app.js file? // response.send(secret_key) ??? }); app.listen(app.get('port'), function() { console.log('Node app is running on port', app.get('port')); }); 内的obj发送到我的index.js文件,以便我可以在那里使用它。

这是正确的方法吗?是否有其他(正确的?)方式将其发送到另一个文件?

我基本上想要对环境变量做同样的事情,例如在app.js中设置var secret_key = process.env.SECRET_KEY并将其发送到index.js以便我也可以在那里使用它

有人可以向我解释我怎么能这样做吗?

2 个答案:

答案 0 :(得分:1)

为了将不同的数据从服务器传递到正在查看的页面,您需要渲染它。这与提供静态文件不同。

Express支持不同的模板引擎,如Jade,EJS和Handlebars。这是一个使用express-generator的小帮助的简单示例。首先通过运行

创建示例项目
$ mkdir example
$ cd example
$ sudo npm install -g express-generator
$ express -e

然后在routes/index.js中,您可以找到呈现名为 index 的视图的相关部分,并传递标题。

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

问题的下一部分是弄清楚如何将数据从html传递到app.js元素中加载的<script>

答案 1 :(得分:0)

假设您希望将SECRET_KEY隐藏在用户之外,则无法将其发送给客户端。在这种情况下,您需要将需要密钥的功能移动到服务器。

对于需要密钥的API请求,请向服务器发出客户端请求,服务器将使用密钥向API发出请求。您将要修改app.get路线:

// '/api-request' will be the URI that the client uses
// the callback will handle what the server does when it receives a request with this URI
app.get('/api-request', function(req, res){

  request('API_URL' + process.env.SECRET_KEY, function(err, data) {

    // send error to the client -- res.send exits the function and ends the request
    if (err) res.send(err)

    // send data to the client
    res.send(data)
  })
})

您的服务器将充当API的中间人,保持您的密钥未暴露并包含在服务器中。

在客户端上,请求将接收服务器使用res.send发回的任何数据。客户不知道有中间人参与。

// the browser is smart and knows that a leading / refers to the current domain
request('/api-request', function(err, data) {
  if (err) // handle error

  // do stuff with the data
  console.log(data)
})

需要密钥的其他操作可以以类似的方式处理。您的服务器将需要一条路由,客户端将使用任何相关信息向其发送请求,服务器将发送任何结果数据。