2017-12-25 34 views
0

node-cronモジュールを使用して2秒ごとにHTTPリクエストを作成しようとしています。ノード、http-requestのノード-cronでエラーが発生しました

私は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; 

私はすでにヘッダーを設定しているようですが、私はエラーが発生しています。どうやってやるの?あなただけONE最終res.renderを持つことができます()要求ハンドラあたり -

_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

ありがとう問題は、あなたのroute.get()ハンドラで2秒ごとに何度も何度もres.render()を呼び出すことです。要求がなされてから2秒ごとに、コード化された方法でウェブサイトが自動的に更新されることは期待できません。クライアントはN秒ごとに要求を送信する(効率的ではない、気にしない)か、Webソケットなどの効率的な方法を使用して達成することができます。

+0

私は現在socket.ioを使用していますが、http要求後にビューを更新できませんでした。私が 'io.connect..'と内部のcronジョブを使うとき。ユーザーが接続するたびに、複数のHTTP要求が送信されます。 –

+0

あなたのサーバー/クライアントでsocket.ioをどのように使用しているのか分からず、私は何が問題なのかよくわかりません。また、あなたのcronジョブの内部でio.connectを使用すると、すでに問題が発生していると思います。 –

関連する問題