我的TypeScript代码有问题:
SyntaxError:JSON中位置0处的意外令牌u:
浏览器显示的TypeScript错误:
roleMatch(allowedRoles): boolean {
var isMatch = false;
var userRoles: string[] = JSON.parse(localStorage.getItem('userRoles'));
allowedRoles.forEach(element => {
if (userRoles.indexOf(element) > -1) {
isMatch = true;
return false;
}
});
return isMatch;
}
以及其他错误的部分:
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
if (localStorage.getItem('userToken') != null) {
let roles = next.data["roles"] as Array<string>;
if (roles) {
var match = this.userService.roleMatch(roles);
if (match) return true;
else {
this.router.navigate(['/forbidden']);
return false;
}
}
else
return true;
}
this.router.navigate(['/login']);
return false;
}
答案 0 :(得分:1)
正如user184994所说,localStorage.getItem('userRoles')
很可能返回undefined
。
SyntaxError:JSON中位置0处的意外令牌u: 是意味着JSON分析器在位置0失败,因为找到了字母
u
。
JSON必须具有有效的JSON data type。
您可能希望将userRoles
初始化为空数组。
var userRoles: string[] = [];
var userRolesStr = localStorage.getItem('userRoles');
if (userRolesStr) {
userRoles = JSON.parse(userRolesStr);
}