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

NodeJS - Pierwszy projekty res.redirect();

VPS Starter Arubacloud
0 głosów
283 wizyt
pytanie zadane 3 czerwca 2021 w JavaScript przez Zaqu93 Gaduła (4,850 p.)

Witam pisze swój pierwszy projekt w NodeJS konkretniej w ExpressJS jest to prosty system logowania. Kiedy użytkownik został znaleziony w bazie danych i wszystko zostało sprawdzone chcę by przekierowało użytkownika na adres /logged używam więc res.redirect('/logged'); potem ustawiam app.get(); na ten route i wysyłam plik res.sendFile(); w zakładce Network w devToolsach widnieje request z poprawnym plikiem HTML jednak nie pojawia się on w widoku strony jest to mój pierwszy projekt i nie do końca wiem co trzeba jeszcze zrobić, z góry liczę na pomoc :) 

Edit: Mam trop choć nie wiem czy to ma sens to czy problem nie pojawia się przez middleware express.static()?

ExpressJS:

const express = require('express');
const path = require('path');
const pool = require('./queries');
const { body, validationResult } = require('express-validator');
const app = express();

const port = 3000;

class User {
    constructor(id, email, passwd, isRemembered) {
        this.id = id;
        this.email = email;
        this.passwd = passwd;
        this.isRemembered = isRemembered;
    }
}

let user = new User();

app.use(express.static(__dirname +'/public'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.post('/login', body('email').isEmail(), body('passwd').isLength({ min: 5 }), (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(200).json({ login: false, data: { error: errors.array(), msg: 'Error!' } });
    }

    const { email, passwd, rememberMe } = req.body;
    
    pool.query(`SELECT user_id FROM users WHERE email='${ email }' AND passwd='${ passwd }'`, (error, response) => {
        if (error) {
            return res.status(200).json({ login: false, data: { error: error, msg: 'Failed to login!' } });
            throw error;
        }
        const id = response.rows;
        if (id.length == 0) {
            return res.status(200).json({ login: false, data: { error: error, msg: 'Failed to login!' } });
        } else {
            user.id = id;
            user.email = email;
            user.passwd = passwd;
            user.isRemembered = rememberMe;
            res.status(200).redirect('/logged');
        }
    }); 
});

app.get('/logged', (req, res) => {
    res.status(200).sendFile(path.join(__dirname, 'public', 'logged.html'));
    console.log(user.id);
});

app.listen(port, () => console.log(`Server is running on port ${ port }... `));

Front-end:

document.addEventListener('DOMContentLoaded', () => {
    const form = document.querySelector('.Login--Form');
    const submit = form.querySelector('.Submit');
    submit.addEventListener('click', () => {
        const email = form.querySelector('.Email').value;
        const passwd = form.querySelector('.Passwd').value;
        const rememberMe = form.querySelector('.Checkbox').checked;
        axios({
            method: 'post',
            url: '/login',
            data: {
                email: email,
                passwd: passwd,
                rememberMe: true
            }
        }).then((response) => {
            const result = form.querySelector('.Result');
            if (response.data.login != false) {
                result.textContent = `Zalogowano sie!`;
            } else {
                result.textContent = 'Niepoprawne Dane Logowania!';
            }
        }).catch((error) => {
            console.log(error);
        });
    });
});

 

1 odpowiedź

+2 głosów
odpowiedź 3 czerwca 2021 przez Comandeer Guru (599,730 p.)
wybrane 3 czerwca 2021 przez Zaqu93
 
Najlepsza

Hm, mam dziwne wrażenie, że Twój formularz nie do końca jest formularzem (nie używasz zdarzenia submit ani też nie blokujesz domyślnej akcji). Niemniej obsługujesz go przy pomocy Ajaksa, więc musiałbyś ręcznie ten plik HTML wyświetlić.

Ogólnie to zrobiłbym to inaczej: skrypt logowania powinien zwracać, czy udało się zalogować, czy nie. Jak się udało, to zrób przekierowanie po stronie przeglądarki (window.location.href = '/logged';). IMO ma to więcej sensu, niż zwracanie Ajaksowi przekierowania.

Podobne pytania

0 głosów
0 odpowiedzi 350 wizyt
pytanie zadane 12 października 2017 w JavaScript przez Frozenfroggie Użytkownik (990 p.)
+3 głosów
1 odpowiedź 737 wizyt
pytanie zadane 18 kwietnia 2015 w JavaScript przez hypothermi Obywatel (1,170 p.)
0 głosów
2 odpowiedzi 504 wizyt
pytanie zadane 18 czerwca 2017 w HTML i CSS przez leemish Użytkownik (780 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...