Ошибка углового HTTP-запроса POST net :: ERR_HTTP2_PROTOCOL_ERROR - PullRequest
1 голос
/ 31 октября 2019

У меня есть собственный API и маршрут POST, работающий следующим образом:

Server

//  Handling CORS with a simple lazy CORS
$app->options('/{routes:.+}', function ($request, $response, $args) {
    return $response;
});
$app->add(function ($req, $res, $next) {
    $response = $next($req, $res);
    return $response
        ->withHeader('Access-Control-Allow-Origin', '*')
        ->withHeader('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Accept, Origin, Authorization, application/json')
        ->withHeader('Access-Control-Allow-Methods', 'GET, POST')
        ->withHeader('Content-Type','application/json')
        ->withHeader('X-Powered-By','Mercurial API');

});

...

$app->post('/api/log', function( Request $request, Response $response){

    $category = $request->getParam('category');
    $value = $request->getParam('value');

    return logQuery($category, $value, $response);

});

Когда я отправляю запрос HTTP POSTиз других источников сервер отвечает нормально, Пожалуйста, нажмите здесь, чтобы увидеть пример

Категория: "НЕКОТОРЫЕ КОШКИ"

значение: "НЕКОТОРЫЕ ВАЛ"

Но когда я отправляю то же самое через свое угловое приложение,

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':'application/json'
  })
};

...

  public putLog(category: string, value: string) {
    //  You can add new argument in header like,
    //  httpOptions.headers = httpOptions.headers.set('Authorization', 'my-new-auth-token');

    const body = JSON.stringify({ category: category, value: value });

    console.log(body);
    return this.http.post<any>(this.apiUrl + '/log', body, httpOptions)
      .subscribe(
        data => {
          console.log('PUT Request is successful.');
        },
        (err: HttpErrorResponse) => {
          if (err.error instanceof Error) {
            console.log('Client-side error occured.');
          } else {
            console.log('Server-side error occured.');
          }
        });

    }
  }

я получаю следующую ошибку.

{"category":"message","value":"asdasd"}
Server-side error occured.
OPTIONS https://sizilkrishna.000webhostapp.com/api/public/api/log net::ERR_HTTP2_PROTOCOL_ERROR

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Ваш API ожидает HttpParams, поэтому вы должны установить свои параметры как параметры, а не тело:

const params = new HttpParams().set("category", category).set("value", value);

const httpOptions = {
  headers: new HttpHeaders({
    'Accept': 'application/json',
  }),
  params: params
};

, а затем иметь тело как null:

return this.http
  .post<any>(
    this.apiUrl + "/log",
    null,
    httpOptions
  )
  // .....

Это кажетсяработают просто отлично: STACKBLITZ

1 голос
/ 31 октября 2019

Вы пропускаете параметры запроса в своем почтовом запросе?

{params: {categoryogy: '2', message: .., ...}}

, потому что когда я используюПо вашей ссылке с параметрами запроса я получаю 200 результатов. но вы не отправляете параметры запроса своему бэкэнду.

отправляйте параметры запроса с угловым значением или ожидайте тело запроса в своем бэкэнде. но я не знаком с узлом / экспрессом. но похоже, что все идет не так.

...