Bottle сообщение не возвращает ответ - PullRequest
0 голосов
/ 24 марта 2020

Я использую Bottle для моего бэкэнда и Angular2 для моего внешнего интерфейса. При использовании запроса POST я хотел бы вернуть ответ, но по какой-то причине он не возвращает ответ

Python код:

@app.post("/api/post/new_post")
def hp_new_post():
    pd = json.loads(request.body.read().decode("utf-8"))
    try:
        cl.eduo.posts.insert_one(
            {
                "h": pd['h'],
                "d": pd['d'],
                "t": pd['t']
            }
        )
    except Exception:
        response.status = 500
    response.content_type = 'application/json'
    response.status = 200
    return response

Angular код:

var result = from(
  fetch(
    this.baseurl,
    {
      body: JSON.stringify(
        {
          "h": h,
          "d": des,
          "t": Date.now()
        }),
      headers: {
        'Content-Type': 'application/json',
      },
      method: 'POST',
      mode: 'no-cors'
    }
  )
).subscribe(
  {
    next(data) {
      console.log(data);
    },
    error(msg) {
      console.log(msg);
    }
  }
)

Когда я получаю данные console.log из запроса, я получаю:

body: null
bodyUsed: false
headers: Headers {  }   
ok: false    ​
redirected: false    ​
status: 0    ​
statusText: ""    ​
type: "opaque"    ​
url: ""

1 Ответ

0 голосов
/ 24 марта 2020

Я рекомендую вам использовать HttpClient. Для этого импортируйте HttpClientModule, и ваш код может быть:

constructor(private httpClient: HttpClient) {}

load() {
  this.http.post(this.baseurl, {
    "h": h,
    "d": des,
    "t": Date.now()
  }, { 
    observe: 'response',
    headers: new HttpHeaders({
      'Content-Type': 'application/json'
    }
  }).subscribe(response => {

    // do stuff with body
    // response.body

    // this will output headers received
    const keys = response.headers.keys();
    const headers = keys.map(key =>
    `${key}: ${response.headers.get(key)}`);

     console.table(headers);
  })
}

Если вам не нужны response данные, а только body, получено:

this.http.post<MyData>(this.baseurl, {
  "h": h,
  "d": des,
  "t": Date.now()
}).subscribe(data => {
  // do stuff with data of type MyData
  data.name...
}); 

Подробнее о Angular официальных документах .

...