首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >node.js错误-发送后不能发送标头

node.js错误-发送后不能发送标头
EN

Stack Overflow用户
提问于 2014-05-28 12:25:29
回答 3查看 1K关注 0票数 1

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

发送后无法发送标头

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

代码语言:javascript
运行
复制
// 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...');

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-28 12:53:49

而不是这样:

代码语言:javascript
运行
复制
res.send(JSON.stringify(items));
res.send(items);

试着:

代码语言:javascript
运行
复制
res.end(JSON.stringify(items));
票数 5
EN

Stack Overflow用户

发布于 2014-05-28 12:46:38

代码语言:javascript
运行
复制
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()就足够了。

票数 0
EN

Stack Overflow用户

发布于 2014-05-28 13:36:11

伙计们,我们解决了问题!

下面是正在运行的新代码:

代码语言:javascript
运行
复制
// 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...');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23911549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档