繁体   English   中英

如何从 node.js 中的 req.body 返回 json 数组?

[英]How to obtain an array of json back from req.body in node.js?

我想将 json 的数组发布到节点 js。 我使用 ajax 发布方法做了同样的事情。在服务器端,我尝试使用 req.body 访问相同的内容。 但是结果是字符串的形式。 所以我无法逐个迭代 json 数组元素。我该怎么做?

      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"
  }]'

我使用的 post 方法是 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);
    }
});

由于我无法从 req.body 获取数组,因此我在 ajax 帖子的 url 中将 JSON 数组作为查询参数发送。 所以我在服务器的 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);
 });

感谢您的测试和更新。 我曾假设您仅发布 JSON,而您发布的表单数据包括 JSON。

我相信在这种情况下最好的方法是使用multer模块来解析上传的数据,如下所示:

服务器.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);
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM