NodeJS 如何检查节点中的请求体是否为空,是否表示?

pu82cl6c  于 2022-11-22  发布在  Node.js
关注(0)|答案(4)|浏览(170)

下面是我的请求正文,它是从客户端发送的

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 credentials = {}个空凭据
在服务器端控制器(节点、快速)中,我想检查请求主体是否为空

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');

我正在检查一切,但总是它的打印外面只

q8l4jmvw

q8l4jmvw1#

2015年欧洲销售战略:

if(req.body.constructor === Object && Object.keys(req.body).length === 0) {
  console.log('Object missing');
}

2015年ES2015年之前:

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');
}

有关pre es2015风格的更多方式:https://coderwall.com/p/_g3x9q/how-to-check-if-javascript-object-is-empty

wnavrhmk

wnavrhmk2#

if (Object.keys(req.body).length === 0) {
   // Do something
}
vbopmzt1

vbopmzt13#

当req.body为空时,它返回一个空对象,这样,即使!req.body为空也会返回false。相反,你应该测试!Object.keys(req.body).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
    }
});
a5g8bdjr

a5g8bdjr4#

使用lodash.isempty怎么样

const isEmpty = require('lodash.isempty');

if(isEmpty(req.body)) {
    console.log('Empty Object');
}

以下是相关文档https://lodash.com/docs/4.17.11#isEmpty
检查值是否为空对象、集合、Map或集。
如果对象没有自己的可枚举字符串键控属性,则将其视为空。
类似于数组的值,如arguments对象、数组、缓冲区、字符串或类似于jQuery的集合,如果其长度为0,则被视为空。同样,如果map和set的大小为0,则被视为空。

相关问题