آفلاین
user-avatar

مشکل در اعتبار سنجی اطلاعات در express

2 سال پیش
توسط موسوی آپدیت شد
آفلاین
user-avatar
موسوی ( 7660 تجربه )
2 سال پیش
تخصص : برنامه نویس وب

سلام

یک مشکل دارم توی اعتبار سنجی اطلاعات زمانی که صفحه login رو باز میکنم میگه Message is not defined
در حالی که من شرط رو قرار دادم داخل صفحه لاگین

اینم کد دو صفحه

کد index.js

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const bodyParser = require('body-parser');
const validator = require('express-validator');
const _ = require('lodash');

app.set('view engine' , 'ejs');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({ extended: false}));
app.use(bodyParser.json());
app.use(validator());

app.get('/' , (req , res) => {
    let title = 'صفحه اصلی';
    res.render('index' , { title })
});

app.get('/login' , (req , res) => {
    res.render('login');
});

app.post('/login' , (req , res) => {
    req.checkBody('email' , 'Empty Email').notEmpty();
    req.checkBody('email' , 'Email is InValid').isEmail();

    return req.getValidationResult()
        .then(result => {

            let errors = result.array();
            if (errors.length > 0) {
                let Message = [];
                errors.forEach((err) => Message.push(err.msg));
                res.render('login' , {Message});
            }

        }).catch(err => console.log(err))
});

server.listen(2500 , () => {
    console.log('server runnig at port 2500');
});

کد صفحه لاگین login.ejs

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>ورود به سایت</title>
    <link rel="stylesheet" href="/css/app.css">
</head>
<body>

    <% if (Message) { %>
        <b>Error</b>
    <% } %>    

    <form action="/login" method="post">
        <p><input type="email" name="email" value="" placeholder="E-Mail Address"></p>
        <p><button type="submit">Login</button></p>
    </form>
</body>
</html>

الان باید چی کار کنم مشکل حل بشه

@hesammousavi

آفلاین
user-avatar
saleh ( 620 تجربه )
2 سال پیش

سلام ببیند اون جای که دارید صفحه لاگین رو رندر میکنین هم باید Message ارسال بشه و شما اینکار نکردین ، میتوند از پکیج connect-flash استفاده کنید و مقدار خطا ها رو درون flash ذخیره کنید و redirect کنید به صفحه لاگین

آفلاین
user-avatar
موسوی ( 7660 تجربه )
2 سال پیش
تخصص : برنامه نویس وب

Message رو پاس دادم به صفحه لاگین اما باز مشکل هست

آفلاین
user-avatar
hdjs ( 70 تجربه )
2 سال پیش

سلام.
به این شکل کار می کند:

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const bodyParser = require('body-parser');
const validator = require('express-validator');
const _ = require('lodash');
const flash = require('connect-flash');

app.set('view engine' , 'ejs');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({ extended: false}));
app.use(bodyParser.json());
app.use(validator());

app.get('/' , (req , res) => {
    let title = 'صفحه اصلی';
    res.render('index' , { title })
});

app.get('/login' , (req , res) => {
  const errors = req.flash('errors' , Message  )
    res.render('login', {hasErrors : errors.length > 0 , message: errors});
});

app.post('/login' , (req , res) => {
    req.checkBody('email' , 'Empty Email').notEmpty();
    req.checkBody('email' , 'Email is InValid').isEmail();

    return req.getValidationResult()
        .then(result => {

            let errors = result.array();
            if (errors.length > 0) {
                let Message = [];
                errors.forEach((err) => Message.push(err.msg));
                req.flash('errors' , Message  )
                res.redirect('/login')
            }

        }).catch(err => console.log(err))
});

server.listen(2500 , () => {
    console.log('server runnig at port 2500');
});

<% if (hasErrors) { %>
    <b><%= message%></b>
<% } %>
آفلاین
user-avatar
موسوی ( 7660 تجربه )
2 سال پیش
تخصص : برنامه نویس وب

مشکل بر طرف نشد کلا flash مقدارش خالیه یعنی مقدار errors خالیه زمانی که به صفحه ارسال میشه

برای ارسال پاسخ باید وارد سایت شوید