Nodejs - обрабатывать и отправлять многочастный запрос, - PullRequest
0 голосов
/ 11 марта 2020

Мое приложение работает на Nodejs сервере, а Nodejs также действует как промежуточное ПО / прокси для запросов, исходящих из приложения. Таким образом, из браузера все вызовы REST переходят на NodeJs, а затем на Java API.

Я вижу проблему обработки запросов с данными из нескольких частей.

Я перехватываю загрузку файла REST позвоните из браузера в моем nodejs, проанализируйте запрос с помощью многопартийной библиотеки и сформируйте объект данных формы из запроса на загрузку файла.

Я использую модуль https для отправки данных в API, так как мне это сделать? отправить запрос данных формы в API через https?

Я отправляю Content-Type как multipart / form-data; border = ---- WebKitFormBoundary6fyv95baqEpoGJaK, полученный из браузера.

var https = require('https');
var multiparty = require('multiparty');
var FormData = require('form-data');
app.post('/v1/filesUpload', (request, response) => {
let apiOptions ={
    headers: {
     'Content-Type': request.headers['Content-Type'],
      'host' : ...
      'path': ...    
     .
     .
     .
      }
}
let form = new multiparty.Form();
let formdataReq = new FormData();
 Object.keys(fields).forEach(function (name) {
          console.log('got field named ' + fields[name]);
          formdataReq.append(name, fields[name].toString());
        });

        formdataReq.append('file', JSON.stringify(files));    
        const req = https.request(apiOptions, (res) => {

        });    
        req.write(querystring.stringify(formDataReq));
      }catch (e) {
        console.log(e);
      }
    });

});

1 Ответ

0 голосов
/ 11 марта 2020
try this

const express = require("express");
const app = express();
const bodyParser = require('body-parser');
var multer  = require('multer')();
const FormData = require('form-data');
const axios = require('axios');
const fs = require('fs');

app.use(bodyParser.json());

app.post('/fileUpload' , multer.single('fileFieldName'), (req , res) => {
    const fileRecievedFromClient = req.file; //File Object sent in 'fileFieldName' field in multipart/form-data
    console.log(req.file)

    let form = new FormData();
    form.append('fileFieldName', fileRecievedFromClient.buffer, fileRecievedFromClient.originalname);

    axios.post('http://server2url/fileUploadToServer2', form, {
            headers: {
                'Content-Type': `multipart/form-data; boundary=${form._boundary}`
            }
        }).then((responseFromServer2) => {
            res.send("SUCCESS")
        }).catch((err) => {
            res.send("ERROR")
        })
})

const server = app.listen(3000, function () {
    console.log('Server listening on port 3000');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...