Javascript 如何在节点express中检查请求正文是否为空?

Javascript 如何在节点express中检查请求正文是否为空?,javascript,node.js,express,Javascript,Node.js,Express,下面是我的请求主体,它是从客户端发送的 var credentials = { "ConsumerData": { "ConsumerStoreId": "a", "ConsumerUserId": "a" }, "CustomerData": { "CustomerId": "2345678890" }, "ErnD": { "

下面是我的请求主体,它是从客户端发送的

var  credentials = {

"ConsumerData": {

            "ConsumerStoreId": "a",
            "ConsumerUserId": "a"
        },
        "CustomerData": {

            "CustomerId": "2345678890"
        },
        "ErnD": {
            "UID": "3",
            "TxnDt": "1"
        },

        "PurD": [{
                "ItemCode": "3456tghw3",
                "ItemEANCode": "223222122"

            },
            {
                "ItemCode": "8jghw3865",
                "ItemEANCode": "3334443222"

            }
        ]
}
对于测试,我正在发送
var凭证={}
空凭证

在服务器端控制器(node,express)中,我想检查req.body是否为空

if(!req.body)

{
 console.log('Object missing');
}
if(!req.body.ConsumerData.ConsumerStoreId)
  {
  console.log('ConsumerStoreId missing');
  }
 if(!req.body.CustomerData.CustomerId)
  {
  console.log('CustomerId missing');
  }
  if(!req.body.ErnD.UID)
  {
  console.log('UID missing');
  }
    console.log('outside'); 

我正在检查所有内容,但它总是只在外部打印

ES2015:

if (Object.keys(req.body).length === 0) {
   // Do something
}
if(req.body.constructor === Object && Object.keys(req.body).length === 0) {
  console.log('Object missing');
}
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return JSON.stringify(obj) === JSON.stringify({});
}

if(isEmpty(req.body)) {
    console.log('Object missing');
}
2015年前:

if(req.body.constructor === Object && Object.keys(req.body).length === 0) {
  console.log('Object missing');
}
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return JSON.stringify(obj) === JSON.stringify({});
}

if(isEmpty(req.body)) {
    console.log('Object missing');
}
有关es2015之前风格的更多方法:

使用

这是文件

检查值是否为空对象、集合、映射或集合

如果对象没有自己的可枚举字符串,则将其视为空 键控属性

类似数组的值,如参数对象、数组、缓冲区、字符串、, 或者类似jQuery的集合如果有长度,则被视为空集合 0。类似地,如果贴图和集具有 大小为0


当req.body为空时,它返回一个空对象,因此,生成
!请求正文
return
false
即使它是空的。相反,你应该测试一下!Object.keys(请求主体).length
。它将从对象中取出每个键并计数,如果没有找到键,它将返回
0`。然后我们需要做的就是使用我们在空数组上使用的相同方法,测试!arr.length使接收一个布尔值成为可能,该布尔值表示它的完整性或不完整性

然后,我们以代码结束:

router.post('/auth/signup', function(req, res) {
    if(!Object.keys(req.body).length) {
        // is empty
    } else if(!req.body.param1 || !req.body.param2 || !req.body.param3) {
        let params = [req.body.param1, req.body.param2, req.body.param3];
        let lackingParam = params.findIndex(param => !param === true) > 0 ? params.findIndex(param => !param === true) > 1 ? "req.body.param3" : "req.body.param2" : "req.body.param1";
        // lacking only lackingParam
    } else {
        // not empty
    }
});

如果(!req.body.ConsumerData.ConsumerStoreId){console.log('ConsumerStoreId missing');}@itsme您能解释一下吗?上面的代码是有效的,但是如果(!req.body.ConsumerData.ConsumerStoreId){console.log('ConsumerStoreId missing');}@itsme你想让我改成这个吗?我做了一些不起作用的事情thtas为什么你能帮我解决,这样它就能帮助我前进?你能真正地控制台.log(typeof req.body)并确保它不会返回未定义的数据吗?让数据={“ConsumerData”:{“ConsumerStoreId”:“a”,“ConsumerUserSerId”:“a”},“CustomerData”:{“CustomerId”:”},“ErnD”:{“UID”:“3”,“TxnDt”:“1”},“PurD”:[{“ItemCode”:“3456tghw3”,“ItemEANCode”:“223222122”},{“ItemCode”:“8jghw3865”,“ItemEANCode”:“3334443222”}]}console.log(Object.keys(data).length==0)//如果此代码可以回答问题,提供关于如何和/或为什么解决问题的额外信息将提高答案的长期价值。提到为什么这个答案比其他答案更合适也没什么坏处。