React Native fetch, получая пустой массив при отправке запроса POST в Laravel Api
Я работаю над проектом для самообучения, в котором есть laravel в бэкэнде и запущенный react native во фронтэнде. Я реализовал экран входа и регистрации для своих приложений. Теперь я пытаюсь подключить его к моему серверу laravel через его маршруты api. Сначала у меня возникла проблема с CORS, поэтому я решил ее, создав новое промежуточное ПО и отредактировав файл kernel.php, как указано в этой теме.
Проблема CORS с приложением React и Laravel API
Теперь я попытался сначала запустить несколько тестов с запросом на получение, моя функция отправки в реакции
handleSubmit = async() => {
const email = this.state.email
const pass = this.state.password
const proxyurl = "https://cors-anywhere.herokuapp.com/";
/*TEST FOR GET REQUEST */
let response = await fetch(`http://mobileprediction/api/user?email=${email}&pass=${pass}`, {
headers: {
"Content-Type" : "application/json",
"Accept" : "application/json"
},
})
let result = await response.json()
console.log(result)
}
и мой файл api.php в маршрутах laravel был
Route::get("/user", function (Request $request) {
return $request;
});
и он дал желаемый результат, но затем, когда я тестировал то же самое с почтовым запросом, я получаю пустой массив, несмотря ни на что, и я не могу понять, в чем проблема
функция handlesubmit в моем приложении для реагирования
handleSubmit = async() => {
const email = this.state.email
const pass = this.state.password
/*TEST FOR POST REQUEST */
let response = await fetch(`http://mobileprediction/api/user`, {
method: "POST",
header : {
"Content-Type" : "application/json",
"Accept" : "application/json"
},
body : JSON.stringify({
emailid : email,
password : pass
}),
})
let result = await response.json()
console.log(result)
}
а файл api.php в laravel - это
Route::get("/user", function (Request $request) {
return $request;
});
Route::post("/user", function(Request $request) {
return $request;
});
2 ответа
Итак, я понял, что из запроса на выборку в react native он отправляет не только входные данные, а скорее страницу с телом, которое имеет значения ключей в формате json. Поэтому я не могу получить доступ к данным на моем сервере как
$request->param
или с
request("param")
вы можете получить строку в формате json с помощью
$request->json()->all()
но все же я не мог добраться до отдельных значений
для меня то, что работало, - это получить все содержимое, а затем получить доступ к значениям с помощью
$postInput = file_get_contents('php://input');
$data = json_decode($postInput, true);
return ["email" => $data["emailid"] ];
Я думаю, вы пишете свои маршруты в web.php
, поскольку ваш API может записывать конечные точки в api.php
.
Попробуйте прокомментировать VerifyCsrfToken
промежуточное ПО в app/Http/Kenrel.php
. у него есть проблема с безопасностью, но вы можете сделать это на этапах обучения.
[ https://laravel.com/docs/6.x/routing ] [поиск CSRF по этой ссылке]
Любые маршруты, указывающие на маршруты POST, PUT или DELETE, которые определены в файле веб-маршрутов, должны включать поле токена CSRF.