javascript - 如何在 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 只检查地图中的第一个元素。如何添加额外的验证?或者如何解决?任何想法
解决方案
你在这里有很多不同的方法。归根结底,它是关于确保您不读取未定义变量的属性。
- 您可以从数据集中过滤未定义的变量。
response.items.map(i => i.fields).filter(i => !!i).find((obj = {}) =>{...}
- 您可以放置一个默认值
let userData = response.items.map(i => i.fields).find((obj = {}) =>{...}
- 您还可以将默认检查放在 if 语句级别
let userData = response.items.map(i => i.fields).find((obj = {}) =>{
if((obj || {}).email == user)
return true;
}
- 您还可以从 API 中过滤掉“不存在的电子邮件”,或者您正在获取数据。
推荐阅读
- c# - 命令行解析器变量所需的选项
- r - 如何删除光栅砖名称前的“X”
- c# - C# WPF - 工具提示中出现的这条奇怪的线是什么?
- javascript - 在同步 JS 工作期间设置加载动画类的问题
- html - 为什么 srcset 不能在我的 flexbox 上正常工作?
- android - 不保证实现 CameraX Extensions api
- python - 如果使用 Python 在 file1 中存在,如何删除 file2 中的所有字符串?
- javascript - 在产品下显示视频数组 - 数据映射切片 javascript firebase 集合:数据显示为空数组 []
- php - 在 2 个输入中上传 2 个文件
- database - 无法从 ncbi 加载文件