最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

节点,带有http请求的node

IT培训 admin 4浏览 0评论

节点,带有http请求的node

我试图通过使用node-cron模块每2秒发出一次HTTP请求。

我有apiCalls.js;

var http = require('https');

module.exports = {
  getData: function(callback) {
    var options = {
      host: 'google',
      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)

谢谢

回答如下:

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

节点,带有http请求的node

我试图通过使用node-cron模块每2秒发出一次HTTP请求。

我有apiCalls.js;

var http = require('https');

module.exports = {
  getData: function(callback) {
    var options = {
      host: 'google',
      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)

谢谢

回答如下:

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

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论