我是Angular的新手。我正在使用这种Angular方法来登录系统。
loginuser(){
const user = {
username: this.username,
password: this.password
};
this.Auth.loginUser(user).subscribe((res)=>{
if(res){
this.Auth.storeData(res.token, res.user);
this.flashMessage.show('You are Successfully logged In.', { cssClass: 'alert-success', timeout: 5000 });
this.router.navigate(['/userProfile']);
}else{
this.flashMessage.show('You are Password or Username not Correct.', { cssClass: 'alert-success', timeout: 5000 });
this.router.navigate(['/login']);
}
});
}
我的angular-cli也显示了这些错误。 但是在我的节点函数中,我明确定义了那些参数。这是我的节点函数。
router.post('/login', (req, res)=>{
const name = req.body.username;
const password = req.body.password;
//console.log(password);
User.findByName(name,(err, user)=>{
if(err) throw err;
if(!user){
res.json({state: false, msg:"No User Found"});
//return false;
}
User.passwordCheck(password,user.password, (err, match)=>{
if(err) throw err;
if(match){
const token = jwt.sign({User} , config.secret, {expiresIn:86400*3});
res.json({
state: true,
token: "JWT" + token,
user:{
id:user._id,
name:user.name,
ID:user.ID,
IDexpDate: user.IDexpDate
}
});
}else {
res.json({state:false,msg:"password does not match"});
}
});
});
console.log(password);
});
我正在使用Angular 6开发该应用程序。不幸的是,我在很多地方都进行了搜索。我认为我的服务功能也需要给出答案,所以这是我的服务文件。
readonly baseURL ='http://localhost:3000/users/login';
storeData(token,userdata){
localStorage.setItem("tokenid",token);
localStorage.setItem("user",JSON.stringify(userdata));
this.authtoken = token;
this.user= userdata
}
loginUser(user){
let header = new HttpHeaders();
header.append('Content-Type','application/json');
return this.http.post(this.baseURL,user,{headers:header});
}
但是当我console.log那些在控制台日志中给我值的res.token和res.user时。我的问题是,为什么vscode编辑器会向我显示这样的错误。非常感谢您给予您宝贵的时间来帮助我。
答案 0 :(得分:0)
您在Node中为响应类型定义的内容不会延续到您的打字稿中。您必须手动定义它。
通过引用resp.user
和resp.token
,Angular希望您定义响应以声明这些对象。通过设置resp: any
,您可以告诉Angular实际上并不在乎寻找匹配类型。
如果您始终希望此处的响应包含用户和令牌,则最好声明响应:
resp: {
user: string,
token: string
}