【问题标题】:How to check req.body empty or not in node ,express?如何在节点中检查 req.body 是否为空,表达?
【发布时间】:2017-08-12 19:13:36
【问题描述】:

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

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 = {} 空凭据

在服务器端控制器(节点,快递)我想检查 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'); 

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

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    ES2015:

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

    2015 年之前:

    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

    【讨论】:

    • if(!req.body.ConsumerData.ConsumerStoreId) { console.log('ConsumerStoreId 缺失'); }
    • @itsme 你能解释一下吗?
    • 上面的代码是有效的,但为此我需要做什么 if(!req.body.ConsumerData.ConsumerStoreId) { console.log('ConsumerStoreId missing'); }
    • @itsme 你想让我改成这个吗?
    • 我做了一些它不起作用的事情,为什么你能帮助我,这样它会帮助我前进
    【解决方案2】:
    if (Object.keys(req.body).length === 0) {
       // Do something
    }
    

    【讨论】:

    • 你真的可以 console.log(typeof req.body) 并确保它没有返回 undefined 吗?
    • 让数据 = {"ConsumerData": { "ConsumerStoreId": "a", "ConsumerUserId": "a" }, "CustomerData": { "CustomerId": "" }, "ErnD" :{“UID”:“3”,“TxnDt”:“1”},“PurD”:[{“ItemCode”:“3456tghw3”,“ItemEANCode”:“223222122”},{“ItemCode”:“8jghw3865” , "ItemEANCode": "3334443222" } ] } console.log(Object.keys(data).length===0) // false
    • 虽然此代码可能会回答问题,但提供有关 如何 和/或 为什么 解决问题的附加 context 将改善答案的长度长期价值。提及为什么这个答案比其他答案更合适也没有什么坏处。
    • 又短又甜....
    【解决方案3】:

    当 req.body 为空时,它会返回一个空对象,这样,!req.body 即使是空的也返回false。相反,您应该测试 !Object.keys(req.body).length. What it will do is take every key from the object and count, if no keys where found it would return 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
        }
    });
    

    【讨论】:

      【解决方案4】:

      lodash.isempty怎么样

      const isEmpty = require('lodash.isempty');
      
      if(isEmpty(req.body)) {
          console.log('Empty Object');
      }
      

      这里是文档https://lodash.com/docs/4.17.11#isEmpty

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-06-20
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多