Request GET změnit na POST – FULL API

d3tr1tus
Člen | 52
+
0
-

Ahoj používám Ublaboo ApiRoute a mám vytvořenou routu

$router[] = new ApiRoute('/api/add-user', "Front:Homepage", ["methods" => ["POST" => "addUser", "OPTIONS"]]);

když je methoda nastavená jako GET vše v pořádku proběhne. Já bych potřeboval nastavit požadavek ale na POST a tam už to vrací chybu

Nette\Application\BadRequestException #404

No route for HTTP request.

Používám kombinaci React + Nette. Když se podívám do Chromu tak metoda je stále nastavená jako GET i když jsem routu definoval jako POST.

Nevíte někdo co s tím? Našel jsem nějaké rady, ale žádné úpravy nepomohli.

Předem děkuji za pomoc :)

David Matějka
Moderator | 6445
+
0
-

Když se podívám do Chromu tak metoda je stále nastavená jako GET i když jsem routu definoval jako POST.

tohle nechapu, kam se divas do chrome?

jak posilas pozadavek na to API?

d3tr1tus
Člen | 52
+
0
-

David Matějka napsal(a):

Když se podívám do Chromu tak metoda je stále nastavená jako GET i když jsem routu definoval jako POST.

tohle nechapu, kam se divas do chrome?

jak posilas pozadavek na to API?

myslím tím když zkontroluju Network → Headers tak tam je

Request URL: http://localhost.nejaka-url.cz/api/add-user
Request Method: GET "nebo" OPTIONS
Status Code: 500 Internal Server Error
Remote Address: 127.0.0.1:80

ale já potřebuji aby tam bylo

Request Method: POST

požadavek posílám z Reactu pomocí Axiosu takhle

axios.post("/add-user", {
            name: name
        }, true).then((response) => {
                console.log(response);
                dispatch({type: "LOADER_DONE", payload: response.data});
            }).catch((err) => {
                console.log(err.message);
                dispatch({type: "LOADER_DONE"});
                _this.props.history.push("/500");
        })

vždycky mi to skončí 500 Internal server error

Ondřej Kubíček
Člen | 494
+
+1
-

to ti ale přece nepomůže… to že ty nastavíš routu jak POST, znamená že přijme jen požadavky, které dorazily přes POST

ale ty v reactu musíš poslat request na server metodou POST, ted jí posíláš GETem, to nemá s nette nic společného

Editoval Ondřej Kubíček (18. 9. 2018 18:29)

d3tr1tus
Člen | 52
+
0
-

@OndřejKubíček právě že jsem to posílal přes POST tak jsem myslel celou dobu že to je chyba v API Routě ale měl jsem tam menší chybku v Reactu. Omlouvám se jdu napsat na správné fórum každopádně díky za pomoc :)

David Matějka
Moderator | 6445
+
0
-

pokud ti to axios.post skonci 500, tak mas chybu v aplikaci, koukni se do logu

d3tr1tus
Člen | 52
+
+1
-

Tak pro ty kdo řeší stejnou chybu tak problém byl na backendu. Poradili mi na Slacku Pehapkari. On axios posílá 2 dotazy první je právě OPTIONS request a stačí nastavit do startup

if ($this->getHttpRequest()->getMethod() == 'OPTIONS') {
            $this->getHttpResponse()->addHeader('Access-Control-Allow-Headers', 'X-Requested-With, X-Parent-Location');
            $this->terminate();
        }

pak už se odešle správně POST request a vše funguje jak má :)