IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Javascript - problém s vyčtením hodnoty

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:16.1.2021 18:22

Ahoj,
už předem si sypu popel na hlavu, je to naprostá banalita, ale nějak jsem vyšel ze cviku.

Mám fci které má zjistit, jestli se hledané slovo nachází v DB

function isExistingWord(word){
        word = word.toLowerCase();
        let ret = null;
        con.query("SELECT id FROM `table` WHERE LOWER(word) LIKE '"+word+"'", function (err, result) {
                if (err){
                        ret = false;
                }else{
                        if(result.length == 1){
                                ret true;
                        }
                        else{
                                ret false;
                        }
                }
        });
        return ret;
}

tzn, že chci po provedení dotazu do proměnné ret bool hodnotu, jestli se řádek v db našel,nebo ne.

Mám ověřeno, že dotaz i jeho vyhodnocení funguje správně, ale ta hodnota se do té proměnné nepřiřadí (vždy vrátí null).
Problém tkví v tom, že se uvnitř toho volání dotazu vytvoří nová lokální (ještě lokálnější než předtím :D :D) proměnná ret, a do ní se přiřazuje výsledek toho dotazu.

Odpovědět
16.1.2021 18:22
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Odpovídá na Jenkings
Matúš Olejník:16.1.2021 20:07

Nerobím v JS, ale než napíše nejaký JS borec tak by som skôr povedal, že problém nie je nejaká "lokálnejšia" premenná. Tá premenná je stále tá istá. Tu dochádza k tomu, že return ret zbehne skorej než ten dopyt do databázy a preto je v premennej stále inicializačná hodnota null.

Treba použiť asynchrónny princíp napr. cez async await a vrátiť hodnotu dotiahnutú z DB až keď sa volanie naozaj dokončí https://developer.mozilla.org/…/Async_await

Inak snáď takéto DB veci nerobíš niekde na frontende :D Rovnako to dosadzovanie hľadaného slova cez LIKE '"+word+"'" je nebezpečné voči SQL injection.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
16.1.2021 20:07
/* I am not sure why this works but it fixes the problem */
Avatar
Jenkings
Tvůrce
Avatar
Odpovídá na Matúš Olejník
Jenkings:16.1.2021 20:12

No vidíš, to mi vlastně vůbec nedošlo, že by to mohlo být tím.

Jinak ohledně bezpečnosti je to samozřejmost, ale já se zasekl už na tomhle, takže jsem to zatím ještě neřešil.

PS. Bude to na serveru

Editováno 16.1.2021 20:13
Nahoru Odpovědět
16.1.2021 20:12
Největší časovou náročnost má výpočet časové náročnosti..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.