2016-07-08 8 views
0

Ich bin sehr neu in Web Development. Ich habe früher Desktop-Entwicklung mit WPF und C# gemacht. Jetzt lerne ich Node.jsParameter an Routen in node.js übergeben

ich ein Modell namens Party.js, in dem ich zwei Exporte wie folgt definieren:

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); 
    }); 
}; 

Nun, ich habe auch eine Route namens Party.js in dem ich Get zwei Methoden wie folgt:

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); 
       } 
      }); 
     } 
    }); 
}); 

Nun, wenn ich 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; 
    } 
}); 

Meine Frage ist: Warum die über Ajax-Anruf gibt mir alle Parteien zurück? Ich möchte nur eine Partei, deren patyCode erhalten, ist in geben auf die Daten des Ajax-Aufruf ....

+0

Sie müssen Ihre party_id zu Ihrem Ajax URL wie folgt hinzufügen - 'url:"/Party/"+ party_id,'. Dann sollte Ihre passende Route auf der Serverseite wie '/ Party /: partyCode' aussehen. –

+0

Wie funktioniert diese Funktion? Party.getPartyByPartyCode? Ich sehe nicht, dass es einen PartyCode als Eingabe verwendet. –

+0

@ManishJangir Kannst du mir bitte sagen, wie ich meinen Partycode an diese Funktion weitergeben kann? – Vishal

Antwort

2

Es gibt einige Fehler in sowohl der Router-Response-Code und Ajax-Funktion:

Zuerst Routers Code korrigieren:

Sie haben den bereitgestellten Party-Code nicht in Ihrem Modell verwendet.

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); 
      } 
     }); 
    } 
}); 

});

Correct Ajax-Funktion aufrufen

Sie müssen den Code Partei zur Verfügung stellen als URL-Parameter wie der Router wie die /:partyCode anzeigt. Versuchen Sie folgendes:

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

Ihre Antwort gibt mir Syntaxfehler: ein zusätzliches Komma ist nach + in URL. Also entfernte ich das und versuchte es erneut. Ich bekomme, dass dies zu http: // localhost: 3000/3 PartyCode = 3 aufgelöst wird, die nicht gefunden wird. – Vishal