جواد
9 ماه پیش توسط جواد مطرح شد
2 پاسخ

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

سلام من یک 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);
  }
};

از ماژول های دیگه هم استفاده کردم به عنوان جایگزین ولی عنایتی نشد
روی دکمه عضویت که کلیک میکنم ارور ها نمایش داده نمیشن و بار دوم که کلیک میکنی نمایش داده میشن و بار سوم که کلیک میکنی نمایش داده نمیشن و ادامه داره تا بی نهایت ....
ممنون میشم دوستان و مهربانان کمک کنن از این باگ رد بشم
روز مرد مبارک ...


ثبت پرسش جدید
مهدی نظری
تخصص : توسعه دهنده Front End
@mahdi.nazari 9 ماه پیش مطرح شد
0

سلام جواد جان 🪶
امیدوارم حالت خوب و عالی باشی 👋
چون روز مرد رو تبریک گفتی جوابتو میدم 😂😂💖

درسته که ارائه کد HTML و Express.js شما کمی حاشیه داره، اما به نظر می‌رسه مشکل اصلی در ارسال درخواست‌های POST و استفاده از Express-Validator درست انجام نمی‌شه. می‌تونید مشکلات زیر رو بررسی کنید:

  1. درخواست POST:
    اطمینان حاصل کنید که HTML فرم شما به درستی ارسال درخواست‌های POST رو پیکربندی کرده باشد. مطمئن شوید که شما در فرم خود از method="POST" استفاده کرده‌اید.

    <form
     class="form-horizontal"
     method="POST"
     action="/auth/register"
     novalidate
    >
  2. Middleware‌های Body Parser:
    مطمئن شوید که middleware‌های body-parser درست اضافه شده‌اند. شما از app.use(bodyParser.urlencoded({ extended: false })); و app.use(bodyParser.json()); استفاده کردید که درست است.

  3. Validator Middleware:
    اطمینان حاصل کنید که middleware اعتبارسنجی شما به درستی به روت افزوده شده باشد. شما از express-validator استفاده کردید و در middleware اعتبارسنجی به درستی فراخوانی شده باشد.

    در اینجا نحوه استفاده از middleware اعتبارسنجی به عنوان مثال:

    const registerValid = require('./path-to-registerValid');
    
    app.post('/auth/register', registerValid.handel(), (req, res) => {
     // کدهای مربوط به ثبت نام
    });
  4. رفتار دیتابیس:
    از نظر کد ارائه داده شده، به نظر می‌رسه که کد ثبت نام در دیتابیس به درستی نوشته نشده است. شما باید اطمینان حاصل کنید که مدل کاربر به درستی با 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);
     }
    });

امیدوارم پاسخ بهت کمک کرده باشه ⚡️
موفق باشی دوست من ✨


جواد
تخصص : php
@node.core 9 ماه پیش مطرح شد
0

سلام دوست دارم دوست عزیز مهدی جان من تمام کد رو برسی کردم ولی مشکل هنوز هست ....


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام