• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Nie może odczytać wartości, a wyświetlić może - EJS, bug compilatora?

0 głosów
763 wizyt
pytanie zadane 12 kwietnia 2021 w JavaScript przez Mitop Użytkownik (700 p.)
zamknięte 12 kwietnia 2021 przez Mitop

Witam, mam dziwny problem. Mam następujący kod w EJS

                     if(!tournamentsList){%>
                        Brak zaplanowanych turniejów
                    <%}else if(tournamentsList.length!==0){
                        const today = new Date();
                        let count=0;
                        for(i=0; i<tournamentsList.length ; i++){ 
                            console.info(tournamentsList[i].date)
                            const date = tournamentsList[i].date;
                            const peaple = getPeapleCount(tournamentsList[i].name);

console.info wyświetla prawidłowo:

2021-04-07T16:47:00.000Z

Jednak następna linijka już się sypie, a co więcej błąd mówi o undefined, gdzie przecież na górze w kodzie widać że jest na to warunek (i przechodzi bo jak widać mogę wyświetlić). Błąd:

TypeError: C:\Users\User\Desktop\bilard\views\tournaments.ejs:42
    40|                 </header>
    41|                     <br>Poniżej znajduje się lista zaplanowanych na najbliższy czas turniejów. Organizowane są one w naszym klubie. Osoby chętne do uczestnictwa, muszą jedynie zapisać się, a samą płatność dokonać gótówką na miejscu w dniu turnieju.<br><br>
 >> 42|                     <%
    43|                     function checkSubscribe(tournamentname,username){
    44|                         let found=false;
    45|                         if(typeof usersInTournamentsList != "undefined"){

Cannot read property 'date' of undefined
    at eval (eval at compile (C:\Users\User\Desktop\bilard\node_modules\ejs\lib\ejs.js:662:12), <anonymous>:75:51)
    at tournaments (C:\Users\User\Desktop\bilard\node_modules\ejs\lib\ejs.js:692:17)
    at tryHandleCache (C:\Users\User\Desktop\bilard\node_modules\ejs\lib\ejs.js:272:36)
    at View.exports.renderFile [as engine] (C:\Users\User\Desktop\bilard\node_modules\ejs\lib\ejs.js:489:10)
    at View.render (C:\Users\User\Desktop\bilard\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\User\Desktop\bilard\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\User\Desktop\bilard\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\User\Desktop\bilard\node_modules\express\lib\response.js:1012:7)
    at ServerResponse.res.render (C:\Users\User\Desktop\bilard\node_modules\express-flash\lib\express-flash.js:29:16)
    at C:\Users\User\Desktop\bilard\server.js:80:17
 

Czy to jest jakiś błąd w ejs? Bo zauwazyłem (bo mam już to drugi raz), że jak zmienię nazwę tej zmiennej przy wysyłaniu i odnowa pozmieniam wszędzie na tą drugą nazwę, to się wszystko naprawia - tak jakby gdzieś były błędne dane przechowywane i potrzebny by był jakiś twardy rebuild, żeby wszystkie pliki się odświeżyły, da się tak w node? Reset kompa też nie pomaga, a nie chce mi się, naprawiać takich rzeczy w taki dziwny sposób, że od nowa zmienną robie i wszedzie nazwe zmieniam.

Próbowałem, też zamiast !tournamentsList to typeof == undefined i też nic to nie zmienia.

 

Edit: wstawiam cały skrypt w ejs:

                    <%
                    function checkSubscribe(tournamentname,username){
                        let found=false;
                        if(typeof usersInTournamentsList != "undefined"){
                            for(i=0 ; i<usersInTournamentsList.length ; i++){
                                if(usersInTournamentsList[i].tournamentname===tournamentname){
                                    if(usersInTournamentsList[i].username===username){
                                        found=true;
                                    }
                                }
                            }
                        }   
                        return found;
                    }
                    function getPeapleCount(tournamentname){
                        let count=0;
                        if(typeof usersInTournamentsList != "undefined"){
                            for(i=0 ; i<usersInTournamentsList.length ; i++){
                                if(usersInTournamentsList[i].tournamentname===tournamentname)
                                    count++;
                            }
                        }   
                        return count;
                    }
                    function changeDateNumber(number){
                        if(number<10)
                            number="0"+number;
                        return number;
                    }
                    if(messages.subscribed){ %>
                        <div class="articlecenter">
                            <b> <%= messages.subscribed %> </b>
                        </div>
                    <% }
                    if(!tournament){%>
                        Brak zaplanowanych turniejów
                    <%}else if(tournament.length!==0){
                        const today = new Date();
                        let count=0;
                        for(i=0; i<tournament.length ; i++){ 
                            console.info(tournament)
                            const date = tournament[i].date;
                            const peaple = getPeapleCount(date);
                            if(date < today){
                                count++;%>
                                <div class = "tournament">
                                    <b><%= tournament[i].names %></b><br>
                                    <b><%= changeDateNumber(date.getDate())+"."+changeDateNumber(date.getMonth())+"."+date.getFullYear()+" "+changeDateNumber(date.getHours())+":"+changeDateNumber(date.getMinutes())%></b><br><br>
                                    <b>Poziom: </b><%=tournament[i].level%><br>
                                    <img height="70" src="img/<%=tournament[i].level%>.png"/><br>
                                    <b>Koszt wstępu:</b> <%= tournament[i].cost %><br>
                                    <b>Nagroda:</b> <%= tournament[i].reward %><br><br>
                                    <b>Liczba osób:</b> <%=peaple%>/<%= tournament[i].maxpeaple%> 
                                    <%if(peaple>=tournament[i].maxpeaple || checkSubscribe(tournament[i].name,user.username)){ %> 
                                    <br><br>
                                    <form action="/turnieje" method="POST">
                                        <input type="hidden" name = "tournamentname" value="<%= tournament[i].name %>"/>
                                        <input type="submit" value="Zapisz się"/>
                                    </form>
                                </div>
                                <%}
                            }
                        }
                        if(count===0){ %>
                            Brak zaplanowanych turniejów
                        <%}
                    } %>

 

komentarz zamknięcia: Rozwiązane
komentarz 12 kwietnia 2021 przez Mitop Użytkownik (700 p.)

No ok działa, wszedłem w to, ale nie mogę swojej strony odpalić:

1
komentarz 12 kwietnia 2021 przez ScriptyChris Mędrzec (190,170 p.)
A czy zatrzymałeś kod dopiero na swoim breakpoincie?
komentarz 12 kwietnia 2021 przez Mitop Użytkownik (700 p.)

Nie no teraz nie moge wejść w stronę, po lewej jest to co wyskakuje jak wchodzę na głowną.

1
komentarz 12 kwietnia 2021 przez ScriptyChris Mędrzec (190,170 p.)
Jeśli nie wznowiłeś debuggera, to nie wejdziesz na stronę, bo wykonanie kodu backendowego jest zatrzymane. Po kliknięciu w opcję "inspect" otwiera się okno debuggera i kod zatrzyma się na początku skryptu - powinieneś go wtedy wznowić (klawisz F8) i wtedy albo kod zatrzyma się na Twoim breakpoincie w szablonie ESJ, albo będziesz musiał wejść na stronę żeby wykonać na backendzie odpowiednią logikę, która dopiero wtedy zatrzyma się na tym breakpoincie. Ewentualnie ten kod ESJ wykonuje się na froncie i w takim przypadku powinieneś zdebugować kod bezpośrednio na stronie, a nie z poziomu Node. Ale nie wiem jak to u Ciebie działa, więc podałem Ci dwie ścieżki debugowania.
komentarz 12 kwietnia 2021 przez Mitop Użytkownik (700 p.)
Dobra problem rozwiązany, miałem for( i = 0... a powinno być for(let i = 0 ... zamykam :D

Podobne pytania

0 głosów
0 odpowiedzi 227 wizyt
pytanie zadane 6 listopada 2022 w JavaScript przez Mefyra Nowicjusz (190 p.)
0 głosów
1 odpowiedź 479 wizyt
pytanie zadane 27 sierpnia 2020 w JavaScript przez boneoflive Użytkownik (930 p.)

93,772 zapytań

142,730 odpowiedzi

323,382 komentarzy

63,368 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...