【问题标题】:node.js error - Can't sent headers after they are sentnode.js 错误 - 发送标头后无法发送标头
【发布时间】:2019-07-01 19:27:07
【问题描述】:

我正在为 node.js 使用 ebay-api,当我出于某种原因刷新页面时,我在控制台中收到错误:

发送后无法发送标头

这是我的代码,谁能帮我理解为什么刷新页面时出现错误?

// 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...');

我认为我的错误可能在于调用函数的顺序,或者有办法避免这种错误调用?

【问题讨论】:

    标签: javascript node.js ebay-api


    【解决方案1】:

    而不是这个:

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

    尝试:

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

    【讨论】:

      【解决方案2】:
      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() 就足够了。

      【讨论】:

      • 对不起 - 也许我没有正确解释我的错误 - 错误不在输出中 - 但在“刷新”页面中。当我刷新页面时,我收到错误消息:“发送标题后无法发送标题。”并且应用程序关闭。所以我无法刷新数据
      • 我会澄清我的答案,但我会告诉你:在你的函数 ebayApiGetRequest 中,你调用 res.send() 两次,所以它会发送两次。
      • 我已经解决了我的问题,我希望它现在得到了更多的理解。我想我可能用错了词...
      【解决方案3】:

      好吧,伙计们,我们发现了问题!

      这是正在运行的新代码:

      // 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...');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 2018-03-13
        • 1970-01-01
        • 2012-07-25
        相关资源
        最近更新 更多