سلام
یک مشکل دارم توی اعتبار سنجی اطلاعات زمانی که صفحه 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>
الان باید چی کار کنم مشکل حل بشه
سلام ببیند اون جای که دارید صفحه لاگین رو رندر میکنین هم باید Message ارسال بشه و شما اینکار نکردین ، میتوند از پکیج connect-flash استفاده کنید و مقدار خطا ها رو درون flash ذخیره کنید و redirect کنید به صفحه لاگین
سلام.
به این شکل کار می کند:
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>
<% } %>
مشکل بر طرف نشد کلا flash مقدارش خالیه یعنی مقدار errors خالیه زمانی که به صفحه ارسال میشه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟