Angular 2没有正确发送POST请求

时间:2017-12-13 00:54:12

标签: angular typescript express angular-http

我尝试通过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'错误消息,我认为应该通过附加上面的头来处理。 此外,收到的'收到请求'消息未记录到与我有关的控制台。

我所做的额外细节和调试:

  • 使用Postman向服务器发送POST请求按预期工作,甚至记录“收到请求后”。
  • GET请求的行为符合预期(即使是来自Angular)。

我认为问题可能是我在Angular代码中没有正确发送内容,但是 - 我不是100%肯定。非常感谢您的帮助。

2 个答案:

答案 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);
}