2016-06-14 1 views
2

Ich versuche, die Anfrage-Versprechen-Bibliothek oder ähnliches zu verwenden, um Dateien über eine Post-Anfrage von Knoten an einen anderen Rechner zu senden, auf dem Node läuft. Ich das normale Anfrage-Modul könnte so etwas wieWie sende ich ein Formular mit einer Anfrage Versprechen?

var req = request.post(url, function (err, resp, body) { 
if (err) { 
    console.log('Error!'); 
    } else { 
    console.log('URL: ' + body); 
    } 
}); 
var form = req.form(); 
form.append('file', '<FILE_DATA>', { 
    filename: 'myfile.txt', 
    contentType: 'text/plain' 
}); 

Dieser Code wird von der Frage: Uploading file using POST request in Node.js aber es ist nicht Versprechungen verwenden.

Kann jemand erklären, wie man das gleiche tut, aber mit der Anfrage-Versprechen-Bibliothek oder wenn es eine andere Möglichkeit gibt, dies zu promitifizieren?

+0

Sie möchten 'req' ein Versprechen zurückgeben? – maioman

+0

Was ist der Zweck der Verwendung von 'Versprechen'? – guest271314

Antwort

6

Nach the docs, die sich aus der Antwort verknüpft sind Sie schon gefunden, Sie brauchen kein .form() Methode auf dem resultierenden Anforderungsobjekt zu verwenden, sondern kann einfach das Formular als formData Option request passieren. Sie werden in der Lage, das gleiche mit Wunsch-Versprechen zu tun:

requestPromise.post({url: url, formData: { 
    file: { 
     value: '<FILE_DATA>', 
     options: { 
      filename: 'myfile.txt', 
      contentType: 'text/plain' 
     } 
    } 
}).then(function(body) { 
    console.log('URL: ' + body); 
}, function(err) { 
    console.log('Error!'); 
}); 

Alternativ Anfrage-Versprechen scheinen noch Anfrage Instanzen zurückzukehren (verziert nur mit then/catch/promise Methoden), so dass die form Funktion soll nach wie vor verfügbar sein:

var req = requestPromise.post(url); 
var form = req.form(); 
form.append('file', '<FILE_DATA>', { 
    filename: 'myfile.txt', 
    contentType: 'text/plain' 
}); 
req.then(function(body) { 
    console.log('URL: ' + body); 
}, function(err) { 
    console.log('Error!'); 
}); 
+0

Ich habe dies versucht, aber ich am Ende mit einem Fehler: Unbehandelte Ablehnung RequestError: Fehler: Schreiben nach Ende – nbroeking

+0

Welches? Hat es mit der nicht-promitifizierten "Anfrage" funktioniert? Und: Ist das der genaue Code, den du benutzt hast? Woher kommt 'FILE_DATA'? Der Code, den ich gepostet habe, sollte niemals eine unbehandelte Ablehnung erzeugen. – Bergi