我正在尝试使用node-cron
模块每2秒发出一次HTTP请求。
我有apiCalls.js;
var http = require('https');
module.exports = {
getData: function(callback) {
var options = {
host: 'google.com',
path: '/index.html'
};
var req = http.get(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
var bodyChunks = [];
res.on('data', function(chunk) {
bodyChunks.push(chunk);
}).on('end', function() {
var body = Buffer.concat(bodyChunks);
console.log('BODY: ' + body);
callback(body);
})
});
req.on('error', function(e) {
console.log('ERROR: ' + e.message);
});
}
}
这很好用。我想每隔2秒调用一次,之后我想更新视图文件。在这里,我不知道我是否需要socket.io
,或者我可以做出反应。
我在index.js;
中调用此函数var express = require('express');
var router = express.Router();
var cron = require('node-cron');
var apiCalls = require('../apiCalls')
router.get('/', function(req, res, next) {
var cronJob = cron.schedule('*/2 * * * * *', function(){
apiCalls.getData(function(data){
res.render('index', { title: 'example', data: data });
});
});
cronJob.start();
});
module.exports = router;
但我收到错误,因为我似乎已经设置了标题。我怎么能这样做?
_http_outgoing.js:503
throw new errors.Error('ERR_HTTP_HEADERS_SENT', 'set');
^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
at validateHeader (_http_outgoing.js:503:11)
谢谢
答案 0 :(得分:0)
问题在于,您在dt, RotMarks
2017-01-01, 1
2017-01-01, 3
2017-03-10, 2
2017-03-10, 4
2017-03-10, 6
2017-06-15, 10
2017-06-15, 15
2017-09-20, 1
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 12
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 4
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-10-31, 1
2017-12-31, 1
2017-12-31, 1
2017-12-31, 1
处理程序中每2秒钟反复调用res.render()
- 每个请求处理程序只能有一个最终的res.render()。您不能指望您的网站在发出请求后每2秒自动更新一次,就像编码一样。您可以让客户端每隔N秒发送一次请求(请注意,效率不高),或使用更高效的内容(例如Web套接字)来实现此目的。