所以我正在heroku页面上执行“getting started”。
通过克隆他们的教程回购,我决定将我自己的index.html
和app.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
以便我也可以在那里使用它
有人可以向我解释我怎么能这样做吗?
答案 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)
})
需要密钥的其他操作可以以类似的方式处理。您的服务器将需要一条路由,客户端将使用任何相关信息向其发送请求,服务器将发送任何结果数据。