Как получить массив json обратно из req.body в node.js? - PullRequest
1 голос
/ 27 апреля 2020

Я хочу опубликовать массив от json до node js. Я сделал то же самое, используя ajax post метод. На стороне сервера я попытался получить то же самое с помощью req.body. Но результат в виде строки. Поэтому я не могу перебирать элементы массива json один за другим. Как я могу это сделать? JSON .parse или stringyfy все отображается как объект. Это то, что получено в req.body

      req.body: '[{"img_id":"img_1","name":"abc","source":"img/Icon_ABc.
  png"},{"img_id":"img_0","name":"flower","source":"img/Icon_flower.png"}, 
  {"img_id":"img_5","name":"panda","source":"img/Icon_panda.png"
  }]'

метод сообщения, который я использовал: ajax.

     Dataform.append("finalAray",JSON.stringify(finalArray))
 $.ajax({
    url: '/api/upload/',
    type: 'POST',
    processData: false,
    contentType: false,
    dataType : 'application/json; charset=utf-8',
    data: Dataform,

    success: function(data){
       //................
    },
    error: function(exception){
        alert('error:'+exception);
    }
});

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Поскольку я не смог получить массив из req.body, я отправил массив JSON в качестве параметра запроса в URL-адресе сообщения ajax. Таким образом, я получил массив в виде строки в req.query на сервере. Затем я проанализировал его и смог выполнить итерацию.

  $.ajax({
    url: '/api/upload/?finalArray='+JSON.stringify(finalArray),
    type: 'POST',
    processData: false,
    contentType: false,
    dataType : 'application/json; charset=utf-8',
    data: fileform,
     success: function(data){
      // ........
    },
    error: function(exception){
        alert('error:'+exception);
    }
});

На сервере

 array=req.query.finalArray;
 JSON.parse(array);
 array.forEach(function(element,index){
        console.log(element);
        console.log(index);
 });
0 голосов
/ 27 апреля 2020

Спасибо за тестирование и обновления. Я предполагал, что вы публикуете только JSON, тогда как вы публикуете данные формы, включая JSON.

Я считаю, что в этом случае лучше всего использовать модуль multer для анализа загруженных данных, как показано ниже:

server. js

const express = require("express");
const app = express();
const port = 3000;
const multer  = require('multer')
const upload = multer();

app.use(express.static("./"));


app.post('/', upload.any(), function(req,res){
    console.log('Received files from client: ', req.files);
    console.log('Received form data from client: ', req.body);

    console.log('Iterating array:');
    let array = JSON.parse(req.body.finalAray);
    array.forEach((element, index) => {
        console.log(`Element at [${index}]: ${element}`)
    });
    res.json( { "status": "ok" } );
})


app.listen(port, function(){
    console.log(`Example app listening at http://localhost:${port}`)
})

клиент

{     
Dataform.append("finalAray",JSON.stringify(finalArray))
 $.ajax({
    url: '/api/upload/',
    type: 'POST',
    processData: false,
    contentType: false,
    data: Dataform,

    success: function(data){
       //................
    },
    error: function(exception){
        alert('error:'+exception);
    }
});
...