Ошибка отправки запроса POST из приложения React в серверную часть Rocket - PullRequest
0 голосов
/ 28 мая 2018

Я получаю ошибку 404 при попытке сделать POST-запрос из одностраничного приложения, даже если маршрут работает в Postman.

rout.rs

#[post("/letters", format = "application/json", data = "<new_letter>")]
fn write_letter(new_letter: Json<NewLetter>, conn: DbConn) -> Json<Value> {
    Json(json!({
        "status": Letter::write(new_letter.into_inner(), &conn),
        "result": null
    }))

}

I 'у меня настроен main.rs для разрешения CORS

let (allowed_origins, failed_origins) = AllowedOrigins::some(&["http://localhost:3000"]);
let options = rocket_cors::Cors {
    allowed_origins: allowed_origins,
    allowed_methods: vec![Method::Get, Method::Put, Method::Post, Method::Delete]
        .into_iter()
        .map(From::from)
        .collect(),
    allowed_headers: AllowedHeaders::all(),
    allow_credentials: true,
    ..Default::default()
};

Все маршруты работают в Postman, а запросы GET работают из моего приложения.Однако, когда я пытаюсь сделать POST-запрос из моего приложения, я получаю 404 на внешнем интерфейсе, и из моего бэкэнда регистрируется следующее:

OPTIONS /api/letters:
=> Error: No matching routes for OPTIONS /api/letters.
=> Warning: Responding with 404 Not Found catcher.
=> CORS Fairing: Turned missing route OPTIONS /api/letters into an OPTIONS pre-flight request
=> Response succeeded.

А вот мой внешний интерфейс для справки:

writeLetter: (letter) => axios.post(`${base_url}/api/letters`, letter)
  .then(res => {
     if (res.status == 201) {
      console.log("letter successfully submitted")
      return res
    }
    throw new Error(res.error)
  }),

Проблема в том, как я использую Axios или rocket_cors?Я обнаружил одну похожую проблему , но, похоже, я правильно ее настраиваю.

1 Ответ

0 голосов
/ 28 мая 2018

Мне кажется, я был сбит с толку тем, как регистрируется маршрут OPTIONS.Я предположил, что он отправляет ответ 404 на передний конец, потому что строка Warning: Responding with 404 Not Found catcher, но две строки под ним говорят Response succeeded, поэтому я углубился в DevTools.

OPTIONS отправлял ответ 200,и так как я учитывал только созданный ответ 201, он выдал ошибку.

Я обновил свой API до

if (res.status == 201 || res.status == 200) {
  console.log("letter successfully submitted")
  return res
}

, и это предотвратило возникновение ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...