我尝试通过Angular 2 HTTP发出简单的POST请求,但请求似乎没有正确发送,这是我用来发送POST请求的代码:
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map';
/** ... */
public sendData(s: string, k: any) {
let h = new Headers();
h.append('Content-Type', 'application/json');
h.append('Accept', 'application/json');
let content = JSON.stringify({
username: s,
key: k
});
console.log(content);
return this.httpService.post(SERVER_URL, content, {
headers: h
})
.map((res: Response) => {
return res.json();
});
}
和Express服务器的代码(在Typescript中)如下:
public handleWhitelistRequest(req: Request, res: Response) {
let out: boolean;
console.log("post request received"); //DEBUG
if (req.body.key) {
out = wl.submit(req.body.username, req.body.key);
} else {
out = wl.submit(req.body.username, {});
}
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.json({
username: req.body.username,
success: out
});
}
不要担心wl
是什么,它只是一个定义的const
。
调用上面的Angular 2代码发送请求会发出'CORS'错误消息,我认为应该通过附加上面的头来处理。
此外,收到的'收到请求'消息未记录到与我有关的控制台。
我所做的额外细节和调试:
我认为问题可能是我在Angular代码中没有正确发送内容,但是 - 我不是100%肯定。非常感谢您的帮助。
答案 0 :(得分:1)
试试这个。
SELECT * FROM(
(SELECT use_id, use_name, mes_read ,mes_date FROM message
JOIN user ON mes_useid_receiver=use_id
WHERE use_id!=1
AND (mes_useid_receiver=1 OR mes_useid_sender=1)
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1)) GROUP BY use_id
UNION
(SELECT use_id, use_name, mes_read ,mes_date FROM message
JOIN user ON mes_useid_sender=use_id
WHERE use_id!=1
AND (mes_useid_receiver=1 OR mes_useid_sender=1)
AND (mes_visible_for_who IS NULL OR mes_visible_for_who=1)) GROUP BY use_id
) as d Order By mes_date desc
答案 1 :(得分:0)
在发送请求之前,您不需要附加这些标头,在发布之前您也不需要JSON.stringify()
内容。
public sendData(s: string, k: any) {
let content = {
username: s,
key: k
};
return this.httpService.post(SERVER_URL, content)
.map((res: Response) => res.json());
}
此外,在您使用subscribe()
对其进行调用之前,您的HTTP方法不会触发,因此我假设您在另一个组件中调用此sendDate()
方法并订阅回复。
请注意,常规HTTP最终将被折旧并替换为HTTP客户端。
这是使用HTTP Client执行此操作的方法,您可以阅读更多here
public sendData(s: string, k: any) {
let content = {
username: s,
key: k
};
return this.httpService.post<any>(SERVER_URL, content);
}