【问题标题】:Node, error with node-cron with http request节点,带有 http 请求的 node-cron 错误
【发布时间】:2018-06-06 22:32:57
【问题描述】:

我正在尝试使用 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)

谢谢

【问题讨论】:

    标签: javascript node.js express cron node-cron


    【解决方案1】:

    问题在于您在 route.get() 处理程序中每 2 秒一次又一次地调用 res.render() - 每个请求处理程序只能有一个最终 res.render()。您不能期望您的网站在发出请求后每 2 秒自动更新一次,就像您编码的那样。您可以让客户端每 N 秒发送一次请求(请注意,效率不高),或者使用更高效的方式(例如 Web 套接字)来实现。

    【讨论】:

    • 我现在正在使用 socket.io,但是在 http 请求之后我无法更新视图。当我使用 io.connect.. 和内部 cron 作业时。每当用户连接时,它都会发送多个 http 请求。
    • 没有看到您如何在服务器/客户端中使用 socket.io,我不确定问题是什么。我认为,在你的 cron 作业中使用 io.connect 已经有问题了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    相关资源
    最近更新 更多