Node.js页面刷新后重新运行页面(并生成新数据)

时间:2015-09-02 10:34:12

标签: javascript node.js ejs nodemon

我在Node.js中运行了一个网页(我使用ejs使用 WebStorm 提供的默认文件夹设置来呈现页面)。目前我运行的node bin/www包含以下内容:

***preamble***
var app = require('../app');
var debug = require('debug')('tennis-geek:server');
var http = require('http');
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
var server = http.createServer(app);
***rest of code***

然后运行app.js文件,其中包含以下内容:

...
var predictions =  require("./routes/predictions");
app.use("/predictions", predictions);
...

这就是问题所在。在此页面的javascript文件(routes/predictions.js)中,我想显示从两个远程源(www.source_json.comwww.source_csv.com)收集的信息。(因为我决定只做两个来源)网络请求同步)。这是私人信息,我不希望最终用户能够访问,所以我认为最好处理和合并这些数据服务器端,然后我希望用户能够看到的任何最终数据都保存进入名为data_array的javascript对象,并通过以下方式发送到相应的ejs页面(views/predictions.ejs):

var express = require('express');
var router = express.Router();
var recline = ("reclinejs");
var papa = require("papaparse");
var request = require('sync-request');

    //Now I collect the Data.

var res = request('GET', 'www.source_json.com');
var data_1_json = JSON.parse(res.getBody('utf8'));
res = request('GET', 'www.source_csv.com');
var data_2_json = papa.parse(res.getBody('utf8'), {header: true, skipEmptyLines: true}).data;

    //Now I do some private number crunching on the data

var data_array = private_number_crunching(data_1_json, data_2_json);

    //Now I send make this information available to the user's browser

router.get('/', function (req, res, next) {
    res.render('predictions', {title: 'Predictions', data_from_js: data_array});
});
module.exports = router;

从两个远程来源收集的数据大约每20分钟变化一次。但是,当我刷新页面时,不会从两个数据源中重新收集数据(我已使用某些时间戳验证了这一点)。 如何在每次请求页面时让Node.js返回新获取的数据? 我是否可以在页面上创建update button,或者某些我可以添加javascript吗?目前,我可以刷新信息的唯一方法是重新启动服务器(CTRL + C + node bin/www)。

到目前为止,我已尝试使用setInterval循环,while循环,添加<% setTimeout('window.location.reload();', 20000); %>。另外,我考虑使用nodemon来观看一些伪文件,这些伪文件可能包含数据源上次更改信息的时间,然后在服务器发生更改时重新启动服务器,但我想避免这种情况。

此外,我查看了“类似”主题:

1 个答案:

答案 0 :(得分:0)

检查是否有效:

var express = require('express');
var router = express.Router();
var recline = ("reclinejs");
var papa = require("papaparse");
var request = require('sync-request');

//Now I collect the Data.



//Now I send make this information available to the user's browser

router.get('/', function (req, res, next) {
    var response1 = request('GET', 'www.source_json.com');
    var data_1_json = JSON.parse(response1.getBody('utf8'));
    var response2 = request('GET', 'www.source_csv.com');
    var data_2_json = papa.parse(response2.getBody('utf8'), {header: true,     skipEmptyLines: true}).data;

   //Now I do some private number crunching on the data

   var data_array = private_number_crunching(data_1_json, data_2_json);
   res.render('predictions', {title: 'Predictions', data_from_js: data_array});
   });
   module.exports = router;