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

NodeJS - Pierwszy projekty res.redirect();

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
436 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 (607,060 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 429 wizyt
pytanie zadane 12 października 2017 w JavaScript przez Frozenfroggie Użytkownik (990 p.)
+3 głosów
1 odpowiedź 787 wizyt
pytanie zadane 18 kwietnia 2015 w JavaScript przez hypothermi Obywatel (1,170 p.)
0 głosów
2 odpowiedzi 697 wizyt
pytanie zadane 18 czerwca 2017 w HTML i CSS przez leemish Użytkownik (780 p.)

93,443 zapytań

142,434 odpowiedzi

322,691 komentarzy

62,805 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

...