[英]Angular 7: Post request always send a null body
我试图了解我已经有好几天的问题了,所以我想使用angular 7将带有用户名和密码的发布请求发送到nodejs rest api进行身份验证,但它发送的空正文是authservice中的登录方法。 ts:
login(username: string, password: string): Observable<any> {
let httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Accepts': 'application/json'
})
};
return this.http.post<any>(
`${this.HOST_DOMAINE}/bo/api/authenticate`,
{
'username': username,
'password': password
},
httpOptions
);
}
这是在auth.component.ts中发送它的方法:
signin() {
this.loading = true;
this.submitted = true;
if (this.loginForm.invalid) {
this.loading = false;
return;
}
this._authService.login(
this.loginForm.controls.username.value,
this.loginForm.controls.password.value)
.subscribe(
data => {
console.log(data);
if (data['done'])
this._router.navigate([this.returnUrl]);
else {
this.showAlert('alertSignin');
this._alertService.error(data['msg'] + "");
this.loading = false;
}
},
error => {
console.log(error);
this.showAlert('alertSignin');
this._alertService.error(error.message);
this.loading = false;
}
);
}
我一直在寻找解决方案,但是我尝试的所有方法都无法正常工作,我也不知道我在这里想念的是什么。 注意:我是初学者
对于任何面临相同问题的人,这里都是一个临时解决方案! 所以我发现这是一个跨源问题,这是围绕它的一项工作:
login(username: string, password: string): Observable<any> {
let httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}),
params: new HttpParams()
.set("username", username)
.set("password", password),
withCredentials: true
};
return this.http.post<any>(
`${this.HOST_DOMAINE}/bo/api/authenticate`,
null,
httpOptions
);
}
我在http标头参数中将参数设置为'include'并在json中将内容类型从json替换为form-urlencoded,在nodejs express中间件中,我允许跨来源的代码段:
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", req.get('origin'));
res.header('Access-Control-Allow-Credentials', true);
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
它有效,但仍需要对来源进行测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.