我正在尝试发出POST请求,但我无法使其正常工作:
testRequest() {
var body = 'username=myusername?password=mypassword';
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http
.post('/api',
body, {
headers: headers
})
.subscribe(data => {
alert('ok');
}, error => {
console.log(JSON.stringify(error.json()));
});
}
我基本上想复制这个http请求(而不是ajax),就像它是由一个html表单发起的一样:
网址: /api
Params:用户名和密码
发布于 2016-02-05 06:05:14
我认为body对于application/x-www-form-urlencoded
内容类型是不正确的。您可以尝试使用以下命令:
var body = 'username=myusername&password=mypassword';
希望对你有帮助,蒂埃里
发布于 2016-12-29 22:06:55
在更高版本的Angular2中,如果您将正确类型的对象作为body
传递,则不需要手动设置Content-Type
标头和编码正文。
你可以做到这一点
import { URLSearchParams } from "@angular/http"
testRequest() {
let data = new URLSearchParams();
data.append('username', username);
data.append('password', password);
this.http
.post('/api', data)
.subscribe(data => {
alert('ok');
}, error => {
console.log(error.json());
});
}
这样,angular将为您编码正文,并设置正确的Content-Type
头。
附注:不要忘记从@angular/http
导入URLSearchParams
,否则它将无法工作。
发布于 2016-11-15 23:31:52
因此,让它成为一个完整的答案:
login(username, password) {
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let urlSearchParams = new URLSearchParams();
urlSearchParams.append('username', username);
urlSearchParams.append('password', password);
let body = urlSearchParams.toString()
return this.http.post('http://localHost:3000/users/login', body, {headers:headers})
.map((response: Response) => {
// login successful if there's a jwt token in the response
console.log(response);
var body = response.json();
console.log(body);
if (body.response){
let user = response.json();
if (user && user.token) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
}
}
else{
return body;
}
});
}
https://stackoverflow.com/questions/35212341
复制相似问题