簡體   English   中英

node.js錯誤-發送標頭后無法發送標頭

[英]node.js error - Can't sent headers after they are sent

我將ebay-api用於node.js,當出於某種原因刷新頁面時,控制台出現錯誤:

發送標頭后無法發送標頭

這是我的代碼,有人可以幫助我了解為什么刷新頁面時出現錯誤嗎?

// example simple request to FindingService:findItemsByKeywords

var ebay = require('../index.js');
var http = require('http');

var express = require('express');
var app = express();
var io = require('socket.io');


app.set('port', process.env.PORT || 5000);

app.get('/getEbay', function (req, res) {
    console.log('inside get');
    //  for avoiding crossbrowser-error
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    res.header('Content-Type', 'application/json');
    var params = {};

    params.keywords = ["cat"];
    params['paginationInput.entriesPerPage'] = 10;
    ebay.ebayApiGetRequest({
        serviceName: 'FindingService',
        opType: 'findItemsByKeywords',
        appId: 'MYAPPID',      // FILL IN YOUR OWN APP KEY, GET ONE HERE: https://publisher.ebaypartnernetwork.com/PublisherToolsAPI
        params: params,
        // filters: filters,
        parser: ebay.parseItemsFromResponse    // (default)
    },
    // gets all the items together in a merged array
  function ebayApiGetRequest(error, items) {
      if (error) throw error;

      console.log('Found', items.length, 'items');
      //  res.send(items);
        console.log(JSON.stringify(items));


      res.contentType('application/json');

      res.send(JSON.stringify(items));

      //  }  
  }
);

});


http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

console.log('Listening on port 5000...');

我認為我的錯誤可能是在調用函數的順序上出現的,還是有辦法避免這種錯誤的調用?

代替這個:

res.send(JSON.stringify(items));
res.send(items);

嘗試:

res.end(JSON.stringify(items));
function ebayApiGetRequest(error, items) {
      if (error) throw error;

      console.log('Found', items.length, 'items');
      //  res.send(items);
        console.log(JSON.stringify(items));


      res.contentType('application/json');

      res.send(JSON.stringify(items));// you send here
      res.send(items);//and you send again right afterwards?

      //  }  
  }

如果您實際執行兩次發送,那么您當然要兩次發送數據。 這些res.send()就足夠了。

好家伙,我們找出了問題!

這是正在運行的新代碼:

// example simple request to FindingService:findItemsByKeywords
var http = require('http');

var express = require('express');
var app = express();
var io = require('socket.io');
var ebay = require('../index.js');


app.set('port', process.env.PORT || 5000);

app.get('/getEbay', function(req, res) {
    console.log('inside get');
    //  for avoiding crossbrowser-error
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    res.header('Content-Type', 'application/json');

    getEbaybyResults(function(error, items) {
          if (error) throw error;

          console.log('Found', items.length, 'items');
          //  res.send(items);
          console.log(JSON.stringify(items));


        // res.contentType('application/json');
        //  console.log(try);
       // res.send(JSON.stringify(items));
        res.end(JSON.stringify(items));
    });


});

function getEbaybyResults(callback) {

   var params = {};

    params.keywords = ["cat"];
    params['paginationInput.entriesPerPage'] = 10;
    ebay.ebayApiGetRequest(
      {
        serviceName: 'FindingService',
        opType: 'findItemsByKeywords',
        appId: 'MYAPPID',      // FILL IN YOUR OWN APP KEY, GET ONE HERE: https://publisher.ebaypartnernetwork.com/PublisherToolsAPI
        params: params,
        // filters: filters,
        parser: ebay.parseItemsFromResponse    // (default)
      },
      function(error, items) {
        callback(error, items);
      }
    );
    //ebayApiGetRequest();
}

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

//console.log('Listening on port 5000...');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM