使用 JSON 制作 Angular2 POST

Making an Angular2 POST with JSON

我有一个用于 API 的简单 Flask 后端,我想制作一个 POST。 我不确定错误是什么 - 我收到错误消息,但不确定它是 Angular 还是 Flask 问题。我在我的 Flask 中尝试了 request.get_json(),得到了

{BadRequest}400 BadRequest: The browser (or proxy) sent a request that this server could not understand

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)
  }

Flask 后端:

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()

我认为你在申请的两方面都有问题。

客户端:

Angular 的 Http's post 方法接收 body 参数中的任何对象,这意味着您不需要将其字符串化。

例如:

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 键中获得了昵称。

最后,更好的做法是return以json的形式给客户端。这就是 Flask's jsonify method is for. Notice the 200 and 400 status codes 附加到响应中的内容,以向客户端指示请求是否被正确接受 (200) 或请求是否错误 (400)。