Отправка данных формы в nodejs с использованием https.request - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь отправить запрос с моего сервера nodejs на другой сервер, а затем мне нужно сохранить ответ в файле.Я использую модуль nodejs https.request.

Это мой запрос:

    var formData = new FormData();
    formData.append('first',3);
    formData.append('second', '25');
    formData.append('source_file', fs.createReadStream(sourcefile));
    formData.append('source_image', fs.createReadStream(sourceimage));

var options = {
    hostname: 'ip',
    path: '/api/path',
    method: 'POST'
}
var file = fs.createWriteStream("file.pdf");
var req = https.request(options, (response) => {
    response.pipe(file);
    console.log("File saved");
    response.send("done")
  });

  req.on('error', (e) => {
    console.error(e);
  });

  req.write(formData);
  req.end();

Но я получаю сообщение об ошибке

First argument must be a string or Buffer

Я пытался отправить свои файлы, используяformData.toString() но при использовании этого, ошибка исчезает, но мои файлы не работают, а также я отправил данные, подобные этим:

 var formData = new FormData();
formData = {
        first: 3,
        second: '25',
        source_file: fs.createReadStream(sourcefile),
        source_image: fs.createReadStream(sourceimage)
    };

Как я могу отправить свои файлы на другой сервер, используя этот запрос.

Спасибо

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Вы можете использовать встроенный в узел body-parser модуль для анализа данных формы в JSON, и вы должны использовать app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.urlencoded({ extended: true }));. И когда вы выполните req.body, тогда ваши данные формы превратятся в объектную форму.

0 голосов
/ 03 декабря 2018

Однажды я столкнулся с проблемой, похожей на эту.Я решил это, используя пакет form-data, доступный на NPM здесь с пакетом axios здесь

приведенный ниже фрагмент работал для меня

const FormData = require("form-data");
const axios = require("axios");

const form = new FormData();
form.append("first", 3);
// other data should go here
form.append("file", fs.createReadStream("filePath"));

axios({
  method: "post",
  url: "url",
  data: form,
  headers: { ...form.getHeaders() }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...