首页 > 解决方案 > 如何在 Nodejs 中为地图添加额外的验证?

问题描述

我有我的代码

  // take data from and check email if it exists 
  const response = await client.getEntries({content_type:'user'});
  let userData = response.items.map(i => i.fields).find(obj =>{
    if(obj.email == user)
      return true;
  })

  // return 401 status if the credential is not match.
  if (user !== userData.email || pwd !== userData.password) {
    return res.status(401).json({
      error: true,
      message: "Email or Password is Wrong."
    });
  }

它工作得很好,直到我填写不存在的电子邮件......然后我得到“UnhandledPromiseRejectionWarning - >无法读取未定义的属性'email'”......据我所知,在这种情况下“userData”是未定义的以及电子邮件。

我试图在这里添加其他

let userData = response.items.map(i => i.fields).find(obj =>{
    if(obj.email == user)
      return true;
    else
      return obj.email = "wrong"; 
  })

但在这种情况下,IF 只检查地图中的第一个元素。如何添加额外的验证?或者如何解决?任何想法

标签: javascriptnode.js

解决方案


你在这里有很多不同的方法。归根结底,它是关于确保您不读取未定义变量的属性。

  1. 您可以从数据集中过滤未定义的变量。

response.items.map(i => i.fields).filter(i => !!i).find((obj = {}) =>{...}

  1. 您可以放置​​一个默认值

let userData = response.items.map(i => i.fields).find((obj = {}) =>{...}

  1. 您还可以将默认检查放在 if 语句级别

let userData = response.items.map(i => i.fields).find((obj = {}) =>{ if((obj || {}).email == user) return true; }

  1. 您还可以从 API 中过滤掉“不存在的电子邮件”,或者您正在获取数据。

推荐阅读