Угловой клиент с корсами и phalcon api - PullRequest
0 голосов
/ 26 августа 2018

Я использую Angular клиент для отправки запроса в phalcon API, который работает с CORS. Запросы GET работают отлично, но при запросе POST я не получаю тело. это всегда ноль.

Это мой угловой почтовый запрос клиента (это тестовая функция, если API тоже получает тело запроса):

delete() {
  const tag = 'testclienttag';
  const body = {
    filename: 'test.txt',
    version: '2'
  };

  this.http.post(this.fileServerUrl + 'file/delete/' + tag, body, this.header())
    .subscribe(res => {
      console.log(res);
    });
}

private header() {
  const httpOptions = {
    headers: new HttpHeaders({
      'Accept': 'application/json',
      'Authorization': this.oAuthService.getAccessToken()
    })
  };
  return httpOptions;
}

это запрашиваемая полезная нагрузка:

{
  filename: "test.txt",
  version: "2"
}

и это функция phalcon, которая вызывается через запрос:

public function deleteAction($tag) {
  $errors = [];
  $data = [];

  $data['tag'] = $tag;
  echo 'tag: '.$data['tag']."\n";
  if ((!is_null($tag)) && (!is_string($tag)))
    $errors['tag'] = 'String expected';

  if ($this - > request - > getPost('filename') != null) {

    $data['file_name'] = $this - > request - > getPost('filename');
    echo 'fileName: '.$data['file_name']."\n";
    if ($data['file_name'] != null) {
      if (!is_string($data['file_name']))
        $errors['file_name'] = 'String expected';
    }

  }

  if ($this - > request - > getPost('version') != null) {

    $data['version'] = $this - > request - > getPost('version');
    echo 'Version: '.$data['version'].
    "\n";
    if ($data['version'] != null) {
      if (!ctype_digit($data['version']) || ($data['version'] < 0))
        $errors['version'] = 'The version must be a positive Integer';
    }
  }...more code here but not relevant
}

Вот что получает API:

{
  "tag": "testclienttag",
  "filename": null,
  "version": null
}

Может кто-нибудь мне помочь? заранее спасибо

UPDATE

решил это: должны использовать на стороне API: $ rawBody = $ this-> request-> getJsonRawBody (true);

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Сообщение Angular кажется подозрительным (разделенные переменные tag и body кажутся еще одним параметром в запросе http.post). Можно ли передать параметры в массиве вроде:

const data = {
    tag: 'testclienttag',
    filename: 'test.txt',
    version: '2'
};

, а затем проанализируйте параметр data в deleteAction?

0 голосов
/ 26 августа 2018

Для разработки с использованием ng serve, если вы используете Angular CLI 6. Мы можем настроить proxy.conf, который будет выступать в качестве прокси для вашего Backend API и избежать ошибки CORS.

https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md

...