سلام من یک validator روی یک روت به اسم register
اعمال کردم واین کانفیگ این فایل هست :
const { check } = require("express-validator");
class registerValid {
handel() {
return [
check("name").isLength({ min: 3 }).withMessage("please insert a name:"),
check("email").isEmail().withMessage("please insert a email:"),
check("password")
.isLength({ min: 8 })
.withMessage("please insert a pas with 8 chracters:"),
];
}
}
module.exports = new registerValid();
کانفیگ فایل روت:
const { check } = require("express-validator");
class registerValid {
handel() {
return [
check("name").isLength({ min: 3 }).withMessage("please insert a name:"),
check("email").isEmail().withMessage("please insert a email:"),
check("password")
.isLength({ min: 8 })
.withMessage("please insert a pas with 8 chracters:"),
];
}
}
module.exports = new registerValid();
مدل :
const Sequelize = require("sequelize");
const sequelizeConfig = require("./../configDatabase");
const User = sequelizeConfig.define(
"user_process",
{
name: {
type: Sequelize.STRING,
allowNull: false,
},
email: {
type: Sequelize.STRING,
allowNull: false,
},
password: {
type: Sequelize.STRING,
allowNull: false,
},
},
{
timestamps: true,
}
);
module.exports = User;
و فایل view:
<div class="container">
<div class="row pt-5 justify-content-center">
<div class="col-8">
<div class="card card-default">
<div class="card-header">
<h5>عضویت در سایت</h5>
</div>
<%if(msgResult.length>0){%>
<div class="alert alert-danger alert-dismissible">
<% msgResult.forEach(err=>{%> <%- err %><br />
<%})%>
</div>
<%}%>
<div class="card-body">
<form
class="form-horizontal"
method="POST"
action="/auth/register"
novalidate
>
<div class="form-group">
<label for="name" class="control-label">نام کامل</label>
<input
id="name"
type="text"
class="form-control"
name="name"
required
/>
</div>
<div class="form-group">
<label for="email" class="control-label">آدرس ایمیل</label>
<input
id="email"
type="email"
class="form-control"
name="email"
required
/>
</div>
<div class="form-group">
<label for="password" class="control-label">پسورد</label>
<input
id="password"
type="password"
class="form-control"
name="password"
required
/>
</div>
<div class="form-group"></div>
<div class="form-group">
<button type="submit" class="btn btn-primary">عضویت</button>
<a href="/auth/google" class="btn btn-danger"
>ورود با اکانت گوگل</a
>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
این هم فایل کانفیگ :
const express = require("express");
const expressLayouts = require("express-ejs-layouts");
const ejs = require("ejs");
const path = require("path");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const flash = require("connect-flash");
const session = require("express-session");
const SequelizeStore = require("connect-session-sequelize")(session.Store);
const sequelizeConfig = require("./configDatabase");
const sessionStore = new SequelizeStore({ db: sequelizeConfig });
const app = express();
module.exports = class Application {
constructor() {
this.configServer();
this.configDatabase();
this.configApp();
this.configRoutes();
}
configServer() {
app.listen(5000, (err) => {
if (err) {
console.log(err);
}
console.log("server created...");
});
}
async configDatabase() {
await sequelizeConfig
.authenticate()
.then(() => {
console.log("Connected to Maysql");
})
.catch((err) => {
console.error("Error connecting to MariaDB:", err);
});
}
configApp() {
app.use(express.static(path.join(__dirname, "public")));
app.set("views", path.join(__dirname, "resource/views"));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.set("view engine", "ejs");
app.use(expressLayouts);
app.set("layout", "masterPage");
app.set("layout extractStyles", true);
app.set("layout extractScripts", true);
app.use(flash());
app.use(
session({
secret: "my-secret-key",
resave: false,
proxy: true,
saveUninitialized: true,
store: sessionStore,
table: "Sessions",
extendDefaultFields: (defaults, session) => {
return {
data: defaults.data,
expires: defaults.expires,
userId: session.userId,
};
},
})
);
app.use(cookieParser());
}
configRoutes() {
const routing = require("./routes/masterRouters");
app.use(routing);
}
};
از ماژول های دیگه هم استفاده کردم به عنوان جایگزین ولی عنایتی نشد
روی دکمه عضویت که کلیک میکنم ارور ها نمایش داده نمیشن و بار دوم که کلیک میکنی نمایش داده میشن و بار سوم که کلیک میکنی نمایش داده نمیشن و ادامه داره تا بی نهایت ....
ممنون میشم دوستان و مهربانان کمک کنن از این باگ رد بشم
روز مرد مبارک ...
سلام جواد جان 🪶
امیدوارم حالت خوب و عالی باشی 👋
چون روز مرد رو تبریک گفتی جوابتو میدم 😂😂💖
درسته که ارائه کد HTML و Express.js شما کمی حاشیه داره، اما به نظر میرسه مشکل اصلی در ارسال درخواستهای POST و استفاده از Express-Validator درست انجام نمیشه. میتونید مشکلات زیر رو بررسی کنید:
درخواست POST:
اطمینان حاصل کنید که HTML فرم شما به درستی ارسال درخواستهای POST رو پیکربندی کرده باشد. مطمئن شوید که شما در فرم خود از method="POST"
استفاده کردهاید.
<form
class="form-horizontal"
method="POST"
action="/auth/register"
novalidate
>
Middlewareهای Body Parser:
مطمئن شوید که middlewareهای body-parser
درست اضافه شدهاند. شما از app.use(bodyParser.urlencoded({ extended: false }));
و app.use(bodyParser.json());
استفاده کردید که درست است.
Validator Middleware:
اطمینان حاصل کنید که middleware اعتبارسنجی شما به درستی به روت افزوده شده باشد. شما از express-validator
استفاده کردید و در middleware اعتبارسنجی به درستی فراخوانی شده باشد.
در اینجا نحوه استفاده از middleware اعتبارسنجی به عنوان مثال:
const registerValid = require('./path-to-registerValid');
app.post('/auth/register', registerValid.handel(), (req, res) => {
// کدهای مربوط به ثبت نام
});
رفتار دیتابیس:
از نظر کد ارائه داده شده، به نظر میرسه که کد ثبت نام در دیتابیس به درستی نوشته نشده است. شما باید اطمینان حاصل کنید که مدل کاربر به درستی با Sequelize ساخته شده و اطلاعات به درستی ذخیره میشوند.
برای پیدا کردن مشکل، میتوانید پس از اعتبارسنجی و پیشپردازش دادهها، دادهها را به دیتابیس اضافه کرده و خروجی مدل را چاپ کنید تا مشکلات را پیگیری کنید.
app.post('/auth/register', registerValid.handel(), async (req, res) => {
// اعتبارسنجی و پیشپردازش دادهها
try {
const user = await User.create({
name: req.body.name,
email: req.body.email,
password: req.body.password,
});
console.log('User created:', user);
// ادامه کدهای مربوط به ثبت نام
} catch (error) {
console.error('Error creating user:', error);
}
});
امیدوارم پاسخ بهت کمک کرده باشه ⚡️
موفق باشی دوست من ✨
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟