2017-06-09 33 views
1

我有一個API的簡單Flask後端,並且想要創建POST。 我不確定錯誤是什麼 - 我收到錯誤消息,但不確定它是否存在Angular或Flask問題。我想在我的瓶request.get_json(),並得到了使用JSON製作Angular2 POST

{}錯誤請求400錯誤請求:瀏覽器(或代理)發送的 該服務器無法理解

Angular2呼叫的請求我service.ts:

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import { Observable} from 'rxjs/Rx'; 
import { Headers } from '@angular/http'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 


@Injectable() 
export class NicksService { 

    private headers = new Headers({'Content-Type': 'application/json'}); 
    nickUrl: string = "http://localhost:5000/nick"; 
    constructor(private http: Http) { } 

    // Send the nick to the server to see if it is valid 
    checkNickValidity(nickName: string): Observable<string>{ 

    return this.http.post(this.nickUrl, JSON.stringify({nick: nickName}), {headers: this.headers}) 
    .map(this.extractData) 
    .catch(this.handleError) 
    } 

瓶後端:

from flask_cors import CORS 
from flask.ext.api import FlaskAPI 
from flask import request 

app = FlaskAPI(__name__) 
CORS(app) 


@app.route('/') 
@app.route('/nick', methods=['POST']) 
def check_nick(): 

    try: 
     nick = request.json 
     if nick =='AmandaPanda': 
      return 'Good' 
     else: 
      return 'No nick found' 
    except: 
     return 'error' 



if __name__ == '__main__': 
    app.run() 
+0

400通常意味着服務器無法接受您的請求,因爲請求不符合預期的格式。它可能包含內容類型,請求參數,網址,標題等。您需要檢查服務器以確定問題。 – YuVi

回答

2

我認爲你的應用程序的兩面都有問題。

客戶端:

角的Http's post方法接收的身體參數的任何物體,這意味着你不需要它字符串化。

例如爲:

this.http.post(this.nickUrl, {nick: nickName}, {headers: this.headers}) 

服務器端:

一旦客戶端的請求到達正確的服務器,你沒有得到正確的數據。

你需要做的是這樣的:

from flask import jsonify 

(... your code ...) 

    data = request.json 
    nick = data.get('nick') 
    if nick == 'AmandaPanda': 
     return jsonify({'message': 'good'}), 200 
    else: 
     return jsonify({'message': 'no nick found'}), 400 

這裏,JSON數據存儲爲字典中的變量data。之後,從該字典的nick密鑰獲得該缺口。

最後,以json形式返回客戶端是一種更好的做法。這就是Flask's jsonify方法的用途。請注意附加到響應的200和400 status codes,以向客戶端指示請求是否被正確接受(200)或者它是否是錯誤的請求(400)。