2016-08-29 3 views
3

Ich arbeite gerade mit Hapi und ich bin auf ein Problem gestoßen, das ich nicht finden kann, irgendeine Lösung für oder vorhergehende Erwähnung von. Wenn ich die folgende Anfrage sende, ist nur mein erster Abfrageparameter im Objekt request.query.Hapijs Abfrageparameter undefined

curl -H "Content-Type: application/json" -X PUT https://localhost:3000/lists/{username}/{listname}?token='token'&resource_id='resource_id' 

mit Gegenständen in {} und '' mit tatsächlichen Namen ersetzt.

ist Mein Weg zur Zeit als solche

geschrieben
server.route({ 
    method: 'PUT', 
    path: '/lists/{username}/{listname}', 
    handler: function(request, reply) { 
     const username = encodeURIComponent(request.params.username); 
     const listname = encodeURIComponent(request.params.listname); 
     const resource_id = request.query.resource_id; 
     const token = request.query.token; 
     console.log(request.query); 
     verify(token, username, {callback}, listname, resource_id, reply); 
    } 
}); 

Die console.log Aufruf Ergebnisse in

{ token: 'token' } 

Wenn ich ein console.log(resource_id) ich "undefined" in der Konsole. hapis Dokumentation besagt, dass alle Abfrageparameter im Objekt request.query gefunden werden sollten. Aus irgendeinem Grund passiert das nicht. Ich habe mir die hapijs-Dokumentation angeschaut, meinen API-Aufruf durchgelesen und die Beispiele für die Handhabung von Abfrageparametern gelesen. Irgendeine Idee, was hier vor sich geht?

Antwort

1

Das Problem ist mit Ihrem Curl-Befehl nicht HapiJS.

Versuchen laufen curl -H "Content-Type: application/json" -X PUT "https://localhost:3000/lists/{username}/{listname}?token=token&resource_id=resource_id"

Es ist das Ampersand in dem Query-String als das Ende des Befehls interpretiert. Für eine Erklärung, warum der Befehl nicht funktionierte, siehe this questions answer

+0

Vielen Dank! Tritt auf mich, dass ich vergaß Shell sieht "&" und führt den Prozess im Hintergrund. – benjdj

0

Das Problem ist mit Brennen der Curl-Anfrage. Es gibt & in der Curl-Anfrage und die URL ist nicht in Anführungszeichen; so wird die & eine Shell, die so modifiziert wurde, dass sie einen getrennten Prozess startet. Ihr Weg funktioniert gut, schießen gerade die Locke mit URL in Anführungszeichen

curl -H "Content-Type: application/json" -X PUT "https://localhost:3000/lists/{username}/{listname}?token='token'&resource_id='resource_id'"

0

Wenn Sie die Daten erhalten möchten aus Abfrage params dann sollten Sie sich wie im folgenden Code tun:

server.route({ 
    method: 'PUT', 
    path: '/lists/{username}/{listname}', 

    validate: { 
     params: { 
      username: Joi.string().min(1).max(15).required(), 
      listname:Joi.string().min(1).max(15).required(), 

     }, 
    query: { 
      token: Joi.number().integer().min(1).max(100).required(), 
      resource_id: Joi.number().integer().min(1).max(100).required(), 
     } 
     }, 
    handler: function (request, reply) { 
     const username = encodeURIComponent(request.params.username); 
     const listname = encodeURIComponent(request.params.listname); 
     const resource_id = request.query.resource_id; 
     const token = request.query.token; 
     console.log(request.query); 
     verify(token, username, {callback}, listname, resource_id, reply); 
     reply("Hello There.."); 
    } 

Sie können den obigen Code verwenden, um die Parameter params/query abzurufen.