2015-06-28 3 views
1

Я работаю на небольшом расстоянии от своих навыков Node js.ajax получить запрос в узле js express

Я хочу добавить некоторые данные в mongodb, нажав кнопку.

стороне клиента код выглядит следующим образом:

 $(function() { 
     $('#add').click(function(){ 
      $.ajax({ 
       type: "GET", 
       url: "/item/<%= products._id %>/add" 
      }).done (function (data) { 
       alert(data); 
       console.log(data); 
      }); 
     }); 
    }); 

    <button type="submit" id="add" class="btn btn-primary">Interessted</button> 

сервера код на стороне, как это:

app.get('/item/:id/add', function(req, res) { 

    Listing.findByIdAndUpdate(
     { _id : req.params.id}, 
     { $push : {"product.interessteduser": req.user._id }}, 
     { safe: true, upsert: true}, 
     function(err, model) { 
      if(err){ 
       console.log(err); 
      } 

     }); 
}); 

код отлично работает для меня, но если я немного подождать, я получаю еще один запрос в моя консоль.

выглядит так:

GET /item/557eec02aa1046b805190207/add 200 120001ms 
GET /item/557eeb82aa1046b805190206/add 200 120000ms 

Таким образом, каждый раз запрос/элемент /: идентификатор/добавить и ждать 120000ms я получаю еще один запрос. Как остановить это?

Я хотел бы нажать кнопку один раз, чтобы сделать/item/557eeb82aa1046b805190206/add Получить запрос, и все.

ответ

4

Вы никогда не отвечаете на запрос. Браузер повторяет запрос через две минуты, если вы не ответите. Попробуйте что-то вроде

res.send("success"); 
0

, как вы получили ответ, однако его всегда элегантно писать отдельные функции, чтобы иметь дело с отправкой дела успех/провал, так что когда-то тестировал следует использовать и позволило бы избежать этих ошибок.


--Expose these two helper methods as module and always use that module to send the result or error response at last. 

    exports.send_success = function (res, data) { 
     res.writeHead(200, {"Content-Type": "application/json"}); 
     var output = { error: null, data: data }; 
     res.end(JSON.stringify(output)); 
    }; 

    exports.send_failure = function (res, err) { 
     var code = exports.http_code_for_error(err); 
     res.writeHead(code, { "Content-Type" : "application/json" }); 
     res.end(exports.error_for_resp(err)); 
    }; 

    function (err, results) { 
      if (err) { 
       helper.send_failure(res, err); 
      } else { 
       helper.send_success(res, results); 
      } 
    } 
0

Добавить res.end(); или return false; в код

Попробуйте что-то вроде этого

app.get('/item/:id/add', function(req, res) { 

    Listing.findByIdAndUpdate(
     { _id : req.params.id}, 
     { $push : {"product.interessteduser": req.user._id }}, 
     { safe: true, upsert: true}, 
     function(err, model) { 
      if(err){ 
       console.log(err); 
      }else{ 
      res.json({'status':'200','message':'Success!'}); 
      res.end(); 
      return false; 
      } 

     }); 
    });