首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs应用程序正在循环ebay API

nodejs应用程序正在循环ebay API
EN

Stack Overflow用户
提问于 2014-08-22 22:00:29
回答 1查看 263关注 0票数 0

此代码的目的是:

  • 通过web前端接受数据
  • 将其反馈到nodejs服务器
  • 节点服务器使用web前端的数据作为EBay API的搜索参数
  • 然后将从ebay发送回来的数据反馈到web前端。

问题是:我第一次运行搜索时,它运行得很好。第二次我运行搜索时,它会在web前端发出相同的数据两次。第三次,四次。诸若此类。

我“认为”问题在于:

代码语言:javascript
复制
//Thus begins the loop
    ebay.ebayApiGetRequest({ 
      serviceName: 'FindingService', 
      opType: 'findItemsByKeywords', 
      appId: ,
      params: params, 
      filters: filters, 
    parser: ebay.parseItemsFromResponse
    }, 
// gets all the items together in a merged array
    function itemsCallback(error, items) { 
      if (error) throw error; 

      console.log('Found', items.length, 'items'); 

      for (var i = 0; i < items.length; i++) { 
        console.log('- ' + items[i].title);
        io.emit('incomingdata', '- ' + items[i].title );
    } 
    console.log('Inside ebayApiGetRequest: ', ++iteration), io.emit('incomingdata', 'Inside ebayApiGetRequest: ' + iteration)     
   }
 ); 

我的输出

外部ebayApiGetRequest: 1

搜索数据是:发送

发现2个项目

  • 耐克扣篮高级专业SB发送帮助8.5
  • 手镯用彩虹织带用50 For橡胶切割机/随机send### 内部ebayApiGetRequest: 1 外部ebayApiGetRequest: 1 搜索数据是:测试2 发现2个项目
  • 铁人(蓝光光盘,2008年,2盘套装,终极版) w/滑盖测试
  • 100只触控超蓝试纸2盒50计数 内部ebayApiGetRequest: 2 发现2个项目
  • 铁人(蓝光光盘,2008年,2盘套装,终极版) w/滑盖测试
  • 100只触控超蓝试纸2盒50计数 内部ebayApiGetRequest: 1 外部ebayApiGetRequest: 1 搜索数据为:第三次搜索 发现2个项目
  • 德国纳粹第三帝国纳粹士兵搜寻轻型10+5邮票WW2时代
  • 老式星球大战黄色第三系列179号冲锋队搜索the...Topps 1977 内部ebayApiGetRequest: 3 发现2个项目
  • 德国纳粹第三帝国纳粹士兵搜寻轻型10+5邮票WW2时代
  • 老式星球大战黄色第三系列179号冲锋队搜索the...Topps 1977 Inside ebayApiGetRequest: 2找到2项
  • 德国纳粹第三帝国纳粹士兵搜寻轻型10+5邮票WW2时代
  • 老式星球大战黄色第三系列179号冲锋队搜索the...Topps 1977 内部ebayApiGetRequest: 1

完整代码如下。

nodejs服务器:

代码语言:javascript
复制
var request = require('request');
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var ebay = require('ebay-api'); 

//This defines what main page to load

app.get('/', function(req, res){
  res.sendfile('engine.html');
});

// Simply lets us know when users connect and disconnect
io.on('connection', function(socket){
  console.log('a user connected');
    socket.on('disconnect', function(){
      console.log('user disconnected');
});

//When data comes in do the following
  socket.on('incomingdata', function(msg){

//Check to make sure msn is not null
    if (msg != ''){

// example simple request to FindingService:findItemsByKeywords 

        var params = {}; 
        params.keywords = [ msg ]; 

// add additional fields 
        params.outputSelector = [ 'AspectHistogram' ]; 
        params['paginationInput.entriesPerPage'] = 10; 

        var filters = {}; 

        filters.itemFilter = [ 
          new ebay.ItemFilter("FreeShippingOnly", true) 
        ]; 

        filters.domainFilter = [ 
          new ebay.ItemFilter("domainName", "Digital_Cameras") 
        ]; 

        ebay.ebayApiGetRequest({ 
          serviceName: 'FindingService', 
          opType: 'findItemsByKeywords', 
          appId: 'Removed for security',      // 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 itemsCallback(error, items) { 
        if (error) throw error; 

        console.log('Found', items.length, 'items'); 

        for (var i = 0; i < items.length; i++) { 
          console.log('- ' + items[i].title);
          io.emit('incomingdata', '- ' + items[i].title ); 
        }   
        itemsCallback = [];
      }); 

//put the data back to the client and console
      console.log('Search data was: ', msg); 
      io.emit('incomingdata',  msg);

//This ends the process and outputs error message if the data was not entered
} else {
    console.log ('No data entered');
    io.emit('incomingdata','No data entered');

};
            });
});


http.listen(3000, function(){
  console.log('listening on *:3000');
});

这是前端

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>The interface heading</title>
  </head>

<!-- Update this junk with CSS tags -->

<body>
  <div id="container" style="width:1000px">

    <div id="header" style="background-color:#DCDCDC;">
   <ul id="messages"></ul>

    <form action="">
      <input id="m" autocomplete="off" />
      <input id="x" autocomplete="off" />
      <button>Send</button>
    </form>


    </div>

    <div id="menu" class= "scroll" style="background-color:white;height:400px;width:700px;float:left;overflow-x:hidden;overflow-y:auto;">
      <p id="sample"></p>
    </div>

    <div id="content" style="background-color:#CCCCCC;height:400px;width:300px;float:left;">
      Scrolling list
    </div>

    <div id="footer" style="background-color:#DCDCDC;clear:both;text-align:center;">
      Statistics
    </div>
  </div>

<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>

<script>
  var socket = io();
  $('form').submit(function(){
    socket.emit('incomingdata', $('#m').val());
//    socket.emit('test', $('#m').val());
    $('#m').val('');
    return false;
  });

  socket.on('incomingdata', function(msg){
    $('#sample').append($('<li>').text(msg));
    var menu_height = $('#menu').outerHeight();
    $('#menu').scrollTop($('#sample').outerHeight());

//    document.getElementById("results").innerHTML = html.join("");
  });
</script>


</body>
</html>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-25 14:06:39

我终于放弃了,给作者发了电子邮件。他向我介绍了最近的捐款。问题在易趣API客户端。2013年10月7日,sgri在题为“将事件处理程序的范围缩小为单个”的文章中解决了这一问题。

https://github.com/benbuckman/nodejs-ebay-api/commit/af83866596a8aa51e8d74594d07a3156c1766249

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25456145

复制
相关文章

相似问题

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