2016-04-10 6 views
2

ich mit ChaiHttp wie dies ein Array von Objekt zu schreiben bin versucht:Wie ein Array von Objekten mit Chai Http schreiben

agent.post('route/to/api') 
    .send(locations: [{lat: lat1, lon: lon1}, {lat: lat2, lon: lon2}]) 
    .end (err, res) -> console.log err, res 

Es gibt einen Fehler wie folgt:

TypeError: first argument must be a string or Buffer 
at ClientRequest.OutgoingMessage.end (_http_outgoing.js:524:11) 
at Test.Request.end (node_modules/superagent/lib/node/index.js:1020:9) 
at node_modules/chai-http/lib/request.js:251:12 
at Test.then (node_modules/chai-http/lib/request.js:250:21) 

events.js:141 throw er; // Unhandled 'error' event ^

Error: incorrect header check at Zlib._handle.onerror (zlib.js:363:17)

I auch versucht, so zu schreiben, wie wir mit Postbote tun:

agent.post('route/to/api') 
    .field('locations[0].lat', xxx) 
    .field('locations[0].lan', xxx) 
    .field('locations[1].lat', xxx) 
    .field('locations[2].lat', xxx) 
    .then (res) -> console.log res 

aber payload.locations wird als undefiniert erhalten.

Haben Sie eine Idee, wie Sie ein Array von Objekten über Chai-http veröffentlichen?

EDIT:

Hier ist mein Weg ist und ich denke, dass es mit Strom Nutzlast etwas nicht in Ordnung ist:

method: 'POST' 
path: 
config: 
    handler: my_handler 
    payload: 
    output: 'stream' 
+0

@Cuthbert, Nr. 'Feld' Methode akzeptiert Zeichenfolgen als zweites Argument. Ich habe stattdessen 'JSON.stringify' verwendet und meinen Beitrag erstellt. Wie auch immer, ich habe herausgefunden, dass das Hauptproblem entweder die Super-Ausgabe oder die Payload-Ausgabe ist. –

Antwort

3

ich hier die gleiche problme hatte. Es scheint, dass einfach die Chai-http-Dokumentation falsch ist. Es heißt:

// Send some Form Data 
chai.request(app) 
.post('/user/me') 
.field('_method', 'put') 
.field('password', '123') 
.field('confirmPassword', '123') 

Welche nicht funktioniert. Dies funktionierte für mich:

chai.request(app) 
    .post('/create') 
    .send({ 
     title: 'Dummy title', 
     description: 'Dummy description' 
    }) 
    .end(function(err, res) { ... } 
+0

Wie beantwortet das die Frage? –

2

Versuchen Sie, .send({locations: [{lat: lat1, lon: lon1}, {lat: lat2, lon: lon2}]}) zu verwenden. Weil .field('a', 'b') nicht funktioniert.

  1. body als Form-Daten

    .put('/path/endpoint') 
    .type('form') 
    .send({foo: 'bar'}) 
    // .field('foo' , 'bar') 
    .end(function(err, res) {} 
    
    // headers received, set by the plugin apparently 
    'accept-encoding': 'gzip, deflate', 
    'user-agent': 'node-superagent/2.3.0', 
    'content-type': 'application/x-www-form-urlencoded', 
    'content-length': '127', 
    
  2. body als application/json

    .put('/path/endpoint') 
    .set('content-type', 'application/json') 
    .send({foo: 'bar'}) 
    // .field('foo' , 'bar') 
    .end(function(err, res) {} 
    
    // headers received, set by the plugin apparently 
    'accept-encoding': 'gzip, deflate', 
    'user-agent': 'node-superagent/2.3.0', 
    'content-type': 'application/json', 
    'content-length': '105',