Wie verwende ich FormData in node.js ohne Browser?

Lesezeit: 3 Minuten

Ich möchte eine Post-Anfrage in NodeJS ohne Browser stellen, da es sich um Backend-Code handelt.

const formdata = new FormData()
formdata.append('chartfile', file);

Aber der obige Code gibt mir einen Fehler als FormData not defined. Ich arbeite mit ES6.

Kann mir jemand sagen, wie man die FormData in nodejs verwendet?

Benutzeravatar von Radical Edward
Radikaler Edward

Sie können verwenden Formulardaten – NPM-Modul.

Benutze es auf diese Weise,

var FormData = require('form-data');
var fs = require('fs');
 
var form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));

  • Danke für deine Antwort. Ich arbeite mit ES6, also habe ich Folgendes importiert:import FormData from 'form-data' Aber ich bekomme eine Fehlermeldung form_data_1.default is not a contructor

    – Josh Thomas

    25. August 2020 um 10:55 Uhr


  • Wenn der Knoten js ist, können Sie nur Folgendes tun var FormData = require('form-data'); Node JS unterstützt die ES6-Syntax für den Import nicht.

    – Radikaler Edward

    25. August 2020 um 11:06 Uhr


  • versuchen import * as FormData from form-data

    – Radikaler Edward

    25. August 2020 um 11:51 Uhr

  • Danke. Ich bekomme einen weiteren Fehler source.on is not a function. Entschuldigung für meine schlechte Frage

    – Josh Thomas

    25. August 2020 um 12:02 Uhr

  • FormData ist eine Knoten-API beginnend mit Knoten 18

    – Boris Werchowski

    7. Juni um 14:32 Uhr

Benutzeravatar von sudo soul
Sudo-Seele

Wenn Sie nur einreichen müssen string Werte und nicht Buffer oder ReadStreamDann URLSearchParams kann für Sie arbeiten!

Originalbeispiel

var fs = require('fs');
 
var form = new URLSearchParams();
form.append('my_field', 'my value');
form.append('my_second_field', 'my value 2');
form.append('my_third_field', 'my value 3');

Axios-Beispiel

const formData = new URLSearchParams();
formData.append('field1', 'value1');
formData.append('field2', 'value2');
const response = await axios.request({
  url: 'https://example.com',
  method: 'POST',
  headers: {'Content-Type': 'application/x-www-form-urlencoded'},
  data: formData
});

  • Bei mir hat es funktioniert. Ich musste es optimieren, aber die Inspiration kam von Ihrer Antwort. Danke schön.

    – OMKAR AGRAWAL

    7. April 2022 um 11:01 Uhr

  • @OMKARAGRAWAL, du hättest es einfach bearbeiten oder hier beisteuern sollen, ein Forken, wenn es nicht benötigt wird, erhöht nur das Rauschen. Wie war der Sinn?

    – Sudo-Seele

    27. Mai 2022 um 15:02 Uhr

  • Dies funktioniert nicht wie beschrieben. URLSearchParams akzeptiert nur eine Zeichenfolge als Wert, daher sind ReadStream oder Buffer nicht gültig. Daher ist dies nicht gleichbedeutend mit FormData.

    – Rantao

    17. Juli 2022 um 22:36 Uhr

  • Dies wird nicht funktionieren, wenn die Anfrage so ist multipart/form-data.

    – Branislav Lazic

    11. August 2022 um 17:51 Uhr

  • Das ist völlig falsch! URLSearchParams und FormData sind zwei verschiedene Dinge und werden nicht funktionieren.

    – MatixYo

    19. Februar um 15:38

FormData ist jetzt Teil von Node 18. Sie haben die experimentelle Warnung entfernt, die sie in Node 17 eingeführt hatten: https://github.com/nodejs/node/commit/d33cbabd79

Jetzt können Sie es verwenden fetch ohne Abhängigkeiten.

FormData ist Teil der JS-Web-API (nicht in nativem NodeJS enthalten). Sie können das installieren form-data Paket stattdessen.

Meiner Meinung nach ist die sauberste Lösung, die keine zusätzlichen Abhängigkeiten erfordert:

const formData = new URLSearchParams({
  param1: 'this',
  param2: 'is',
  param3: 'neat',
}) 

Benutzer-Avatar von famzah
famzah

Ich würde das npm-Modul vorschlagen formdata-node weil es eine vollständige (spezifikationskonforme) Formulardaten Implementierung für Node.js. Es unterstützt beide ESM/CJS-Ziele, sodass EM6 unterstützt wird. Ein paar Beispiele finden Sie hier npm-Modulseite.

Whit Waldos Benutzeravatar
Whit Waldo

 let _data = new FormData();
_data.append(`FaceDataRecord', '{"faceLibType":"blackFD","FDID":"1","FPID":"${employeeNo}"}`);
_data.append('img', fs.createReadStream('/C:/Users/ALIENWARE/Downloads/unnamed.jpg'));

let _config = {
    method: 'put',
    maxBodyLength: Infinity,
    url: 'http://192.168.1.3/ISAPI/Intelligent/FDLib/FDSetUp?format=json',
    headers: {
        'Accept': '*/*',
        'Accept-Language': 'en-US,en;q=0.9',
        'Connection': 'keep-alive',
        'Cookie': 'language=en; WebSession_F82FED6D22=' + cookie,
        'Origin': 'http://192.168.1.3',
        'Referer': 'http://192.168.1.3/index.asp',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest',
        ..._data.getHeaders()
    },
    data: _data
};

await axios.request(_config)
    .then((response) => {
        console.log(JSON.stringify(response.data));
    })
    .catch((error) => {
        console.log(error);
    });

TypeError: Eigenschaft „Name“ von undefiniert kann nicht gelesen werden

1453920cookie-checkWie verwende ich FormData in node.js ohne Browser?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy