2016-07-08 1 views
0

Я очень новичок в веб-разработке. Раньше я занимался разработкой настольных систем с использованием WPF и C#. Сейчас я учусь Node.jsПередача параметров маршрутам в node.js

У меня есть модель под названием Party.js, в которой я определяю два экспорта следующим образом:

module.exports.getAllParties = function(callback){ 
    Party.find().lean().exec(function(err, parties){ 
    if (err) return callback(err, null); 
    callback(null, parties); 
    }); 
}; 

module.exports.getPartyByPartyCode = function(partyCode, callback){ 
    Party.find({partyCode: partyCode}).exec(function(err, party){ 
    if(err) return callback(err, null); 
    callback(null, party); 
    }); 
}; 

Теперь у меня есть маршрут под названием Party.js, в котором у меня есть два получить методы следующим образом:

router.get('/', function(req, res, next){ 

    //retrieve all parties from Party model 
    Party.getAllParties(function(err, parties) { 
     if (err) { 
      return console.error(err); 
     } else { 
      //respond to both HTML and JSON. JSON responses require 'Accept: application/json;' in the Request Header 
      res.format({ 

       //response in dust or jade files 
       html: function(){ 
        res.render('Party', { 
         title: 'Party', 
         "parties" : parties 
        }); 
       }, 

       //JSON response will show all parties in JSON format 
       json: function(){ 
        res.json(parties); 
       } 
      }); 
     } 
    }); 
}); 

router.get('/:partyCode', function(req, res, next){ 

    Party.getPartyByPartyCode(function(err, party) { 
     if (err) { 
      return console.error(err); 
     } else { 
      //respond to both HTML and JSON. JSON responses require 'Accept: application/json;' in the Request Header 
      res.format({ 

       //response in dust or jade files 
       html: function(){ 
        res.render('Party', { 
         title: 'Party', 
         "party" : party 
        }); 
       }, 

       //JSON response will show all parties in JSON format 
       json: function(){ 
        res.json(party); 
       } 
      }); 
     } 
    }); 
}); 

Теперь, когда я использую Ajax:

var inputElem = $('#partyForm :input[name="partyCode"]'), 
    inputVal = inputElem.val(), 
    data = { partyCode : inputVal }, 
    eReport = ''; //error report 

$.ajax(
{ 
    type: "GET", 
    url: "/Party", 
    dataType: "json", 
    data: data, 
    beforeSend: function(jqXHR, settings) 
    { 
     console.log(settings.url); 
    }, 
    success: function(party) 
    { 
     if (party) 
     { 
      console.log(party); 
      return 'Party ' + party.partyName + ' has already taken party code: ' + party.partyCode + '. Please choose a different PartyCode.'; 
     } 
     else 
     { 
      console.log("party does not exist."); 
      return true; 
     } 
    }, 
    error: function(xhr, textStatus, errorThrown) 
    { 
     alert('ajax loading error... ... '+url + query); 
     return false; 
    } 
}); 

Мой вопрос: Почему выше ajax call возвращает мне все стороны? Я просто хочу, чтобы получить партию, чья patyCode передаются в данные Аякса вызова ....

+0

Вам нужно добавить свой party_id в свой URL-адрес ajax, как это - 'url:"/Party/"+ party_id,'. Тогда ваш соответствующий маршрут на стороне сервера должен выглядеть как «/ Party /: partyCode» –

+0

, как эта функция работает с Party.getPartyByPartyCode? Я не вижу, что он использует какой-либо partyCode в качестве входных данных. –

+0

@ManishJangir Не могли бы вы рассказать мне, как я могу передать свой партийный код этой функции? – Vishal

ответ

2

Есть некоторые ошибки в оба коде отклика маршрутизатора и функции Ajax:

Сначала исправьте код маршрутизатора:

Вы не использовали предоставленный код участника в своей модели.

router.get('/:partyCode', function (req, res, next) { 

var partyCode = req.param('partyCode'); 

Party.getPartyByPartyCode(partyCode, function (err, party) { 
    if (err) { 
     return console.error(err); 
    } else { 
     //respond to both HTML and JSON. JSON responses require 'Accept: application/json;' in the Request Header 
     res.format({ 
      //response in dust or jade files 
      html: function() { 
       res.render('Party', { 
        title: 'Party', 
        "party": party 
       }); 
      }, 
      //JSON response will show all parties in JSON format 
      json: function() { 
       res.json(party); 
      } 
     }); 
    } 
}); 

});

Правильная функция Ajax вызова

Вы должны предоставить код партии в качестве параметра URL в маршрутизаторе указывает на то, как этот /:partyCode. Попробуйте следующее:

var inputElem = $('#partyForm :input[name="partyCode"]'), 
    inputVal = inputElem.val(), 
    eReport = ''; //error report 

$.ajax({ 
    type: "GET", 
    url: "/"+inputVal, 
    dataType: "json", 
    data: data, 
    beforeSend: function (jqXHR, settings) { 
     console.log(settings.url); 
    }, 
    success: function (party) { 
     if (party) 
     { 
      console.log(party); 
      return 'Party ' + party.partyName + ' has already taken party code: ' + party.partyCode + '. Please choose a different PartyCode.'; 
     } 
     else 
     { 
      console.log("party does not exist."); 
      return true; 
     } 
    }, 
    error: function (xhr, textStatus, errorThrown) { 
     alert('ajax loading error... ... ' + url + query); 
     return false; 
    } 
}); 
+0

ваш ответ дает мне синтаксическую ошибку: дополнительная запятая есть после + в url. Итак, я удалил это и попробовал еще раз. Я получаю, что это разрешает http: // localhost: 3000/3? PartyCode = 3, который не найден. – Vishal