为什么我们不能将数据作为javascript对象而不是JSON对象发送?

时间:2018-08-08 11:38:00

标签: javascript json node.js express serverside-javascript

我是expressjs的新手。我已经在其中创建了这个应用程序,当我通过POSTMAN传递JSON格式的数据时,它将返回数据。很好,但是当我在请求正文中将数据作为JavaScript对象发送时,则无法正常工作,即正文为空。

代码:

var express= require('express')
var eApp= express();

eApp.use(express.json());

var collection= [{id: 1, name:'Hunain1'},
                 {id: 2, name:'Hunain2'},
                 {id: 3, name:'Hunain4'}
                ];

eApp.post('/api/hunain/', (req, res) => 
{
    //var col= collection.find(col => col.id === parseInt(req.params.id));

    if(req.body === "")
    {
        res.status(404).send("sorry, object is empty");     
    }
    else
    {
        var collObj= {id: collection.length, name: req.body.name};
        collection.push(collObj);

        res.send(collObj);
    }
});

//console.log('nodeapp4 has been accessed') 

eApp.listen(100, () => console.log('nodeapp4 is listening to your requests'));

JSON请求:

{
    "id": 3,
    "name": "Bose"
}

返回

{
    "id": 4,
    "name": "Bose"
}

这是我在邮递员中选择application / Json的时候

但是当我选择Javascript并将其写在正文中时:

 {
    id : "2",
    name : "Bose"
}

然后它仅返回id但不返回名称,即body发送为空,为什么?

1 个答案:

答案 0 :(得分:0)

JSON是一种数据传输格式。唯一的目的是紧凑,易于序列化/反序列化以及独立于语言编程(那里提供所有流行语言的JSON库)。

JavaScript对象特定于JavaScript运行时(Python或C#服务器不能使用它们),并且由于它们可能包含行为(方法),因此对于数据传输而言是不安全的。想象有人向您发送了这个恶意JS对象:

{
  firstName: (function () {
    var fs = require('fs');
    // proceed to delete all files in the directory...
  })()
}

如果您在Node.js环境中,并且运行时解析了此类恶意对象,则您将面临巨大的安全威胁。