Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何转换可观测值<;用户>;不可观测<;布尔值>;角度4_Javascript_Node.js_Angular_Typescript_Rxjs - Fatal编程技术网

Javascript 如何转换可观测值<;用户>;不可观测<;布尔值>;角度4

Javascript 如何转换可观测值<;用户>;不可观测<;布尔值>;角度4,javascript,node.js,angular,typescript,rxjs,Javascript,Node.js,Angular,Typescript,Rxjs,我想实现canActivate()方法,以限制管理路由。我在checkAdmin方法(在我的服务文件中)中返回类型为user的observable,但canActivate方法的返回类型是类型为boolean的observable。 所以我无法将“User”类型的可观测值转换为boolean类型的可观测值。请帮助我,因为我在角度和平均堆栈是新的 用户模式模型 /*=================== 导入节点模块 =================== */ const mongoose=r

我想实现canActivate()方法,以限制管理路由。我在checkAdmin方法(在我的服务文件中)中返回类型为user的observable,但canActivate方法的返回类型是类型为boolean的observable。 所以我无法将“User”类型的可观测值转换为boolean类型的可观测值。请帮助我,因为我在角度和平均堆栈是新的

用户模式模型

/*===================
导入节点模块
=================== */
const mongoose=require('mongoose');//MongoDB的节点工具
mongoose.Promise=global.Promise;//配置猫鼬承诺
const Schema=mongoose.Schema;//从Mongoose导入模式
常量bcrypt=require('bcrypt-nodejs');//NodeJS的原生JS-bcrypt库
//验证用于检查电子邮件长度的函数
让emailLengthChecker=(电子邮件)=>{
//检查电子邮件是否存在
如果(!电子邮件){
return false;//返回错误
}否则{
//检查电子邮件字符串的长度
如果(email.length<5 | | email.length>30){
return false;//如果长度不正确,则返回错误
}否则{
return true;//作为有效电子邮件返回
}
}
};
//验证函数以检查电子邮件格式是否有效
让ValidMailChecker=(电子邮件)=>{
//检查电子邮件是否存在
如果(!电子邮件){
return false;//返回错误
}否则{
//用于测试有效电子邮件的正则表达式
const regExp=new regExp(/^([^()\[\]\\,;:\s@“]+(\.[^()\[\]\,;:\s@“]+)*)(“+”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]++];
return regExp.test(email);//返回正则表达式测试结果(true或false)
}
};
//电子邮件验证程序数组
常量电子邮件验证程序=[
//第一个电子邮件验证程序
{
验证程序:emailLengthChecker,
消息:“电子邮件必须至少包含5个字符,但不超过30”
},
//第二个电子邮件验证程序
{
验证人:ValidMailChecker,
消息:“必须是有效的电子邮件”
}
];
//验证函数以检查用户名长度
让usernameLengthChecker=(用户名)=>{
//检查用户名是否存在
如果(!用户名){
return false;//返回错误
}否则{
//检查用户名字符串的长度
如果(username.length<3 | | username.length>15){
return false;//如果不满足长度要求,则返回错误
}否则{
return true;//作为有效用户名返回
}
}
};
//验证函数以检查用户名格式是否有效
让validUsername=(用户名)=>{
//检查用户名是否存在
如果(!用户名){
return false;//返回错误
}否则{
//用于测试用户名格式是否有效的正则表达式
const regExp=新的regExp(/^[a-zA-Z0-9]+$/);
return regExp.test(username);//返回正则表达式测试结果(true或false)
}
};
//用户名验证程序数组
常量usernameValidators=[
//第一个用户名验证程序
{
验证程序:usernameLengthChecker,
消息:“用户名必须至少为3个字符,但不得超过15个”
},
//第二个用户名验证程序
{
验证人:validUsername,
消息:“用户名不能有任何特殊字符”
}
];
//验证用于检查密码长度的函数
让passwordLengthChecker=(密码)=>{
//检查密码是否存在
如果(!密码){
return false;//返回错误
}否则{
//检查密码长度
如果(password.length<8 | | password.length>35){
return false;//如果不满足密码长度要求,则返回错误
}否则{
return true;//返回有效密码
}
}
};
//验证函数以检查密码格式是否有效
让validPassword=(密码)=>{
//检查密码是否存在
如果(!密码){
return false;//返回错误
}否则{
//用于测试密码是否为有效格式的正则表达式
常量regExp=newregexp(/^(?=.[a-z])(?=.[a-z])(?=..[\d])(?=.[\W]){8,35}$/;
return regExp.test(password);//返回正则表达式测试结果(true或false)
}
};
//密码验证器数组
常量密码验证程序=[
//第一密码验证器
{
验证程序:passwordLengthChecker,
消息:“密码必须至少为8个字符,但不得超过35”
},
//第二密码验证器
{
验证人:validPassword,
消息:“必须至少有一个大写、小写、特殊字符和数字”
}
];
//用户模型定义
const userSchema=新模式({
电子邮件:{type:String,必需:true,unique:true,小写:true,validate:emailValidators},
用户名:{type:String,必需:true,unique:true,小写:true,validate:usernameValidators},
密码:{type:String,必需:true,validate:passwordValidators},
isAdmin:{type:Boolean,默认值:false}
});
//加密密码的模式中间件
userSchema.pre('save',函数(下一步){
//在应用加密之前,请确保密码是新的或已修改的
如果(!this.isModified('password'))
返回next();
//应用加密
bcrypt.hash(this.password,null,null,(err,hash)=>{
if(err)返回next(err);//确保没有错误
this.password=hash;//对密码应用加密
next();//退出中间件
});
});
//登录时比较密码和加密密码的方法
userSchema.methods.comparePassword=函数(密码){
返回bcrypt.compareSync(password,this.password);//返回登录密码与数据库中密码的比较(true或false)
};
//导出模块/模式

module.exports=mongoose.model('User',userSchema)为了激活防护装置,需要完成可观察到的。尝试:

canActivate(router: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return this.authService.checkAdmin()
        .map(user => user.isAdmin)
        .first();
}

如果没有相关的代码,每个人都只是猜测而已。我请求你发布一些相关的代码。嘿,我已经添加了代码嘿,有人知道答案了吗,我非常需要帮助,因为我正在学习请建议其他方法确保上述可观察对象正在发出一个值它正在发出一个值它在访问广告时没有显示任何内容