是什么导致了这个错误?方法未定义

时间:2021-01-05 08:32:26

标签: node.js mongoose ejs

我正在尝试让用户注册但角色不同。

  1. 管理员角色和
  2. 学生角色

当我尝试使用不完整的详细信息进行注册时,不是重定向到出现错误的同一页面,而是显示引用错误。方法未定义。

这是错误

ReferenceError: C:\Users\Abuabdurrahman\Desktop\online exam project\v1\views\signup.ejs:8
    6|         </h1>

    7|         <%- include('partials/message'); %>

 >> 8|         <form action="/signup/<%= method %>" method="POST">

    9|           <div class="form-group">

    10|             <label for="name">Name</label>

    11|             <input


method is not defined
    at eval (eval at compile (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\ejs\lib\ejs.js:661:12), <anonymous>:13:26)
    at signup (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\ejs\lib\ejs.js:691:17)
    at tryHandleCache (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\ejs\lib\ejs.js:272:36)
    at View.exports.renderFile [as engine] (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\ejs\lib\ejs.js:489:10)
    at View.render (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\response.js:1012:7)
    at ServerResponse.res.render (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express-ejs-layouts\lib\express-layouts.js:77:18)
    at C:\Users\Abuabdurrahman\Desktop\online exam project\v1\Routes\user.js:100:17
    at Layer.handle [as handle_request] (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\router\index.js:281:22
    at param (C:\Users\Abuabdurrahman\Desktop\online exam project\v1\node_modules\express\lib\router\index.js:354:14)

这是我的 signup.ejs

<div class="row mt-5">
    <div class="col-md-6 m-auto">
      <div class="card card-body glass_box">
        <h1 class="text-center mb-3">
          <i class="fas fa-user-plus"></i> Register
        </h1>
        <%- include('partials/message'); %>
        <form action="/signup/<%= method %>" method="POST">
          <div class="form-group">
            <label for="name">Name</label>
            <input
              type="name"
              id="name"
              name="name"
              class="form-control"
              placeholder="Enter Name"
              value="<%= typeof name != 'undefined' ? name : '' %>"
            />
          </div>
          <div class="form-group">
            <label for="email">Email</label>
            <input
              type="email"
              id="email"
              name="email"
              class="form-control"
              placeholder="Enter Email"
              value="<%= typeof email != 'undefined' ? email : '' %>"
            />
          </div>
          <div class="form-group">
            <label for="password">Password</label>
            <input
              type="password"
              id="password"
              name="password"
              class="form-control"
              placeholder="Create Password"
              value="<%= typeof password != 'undefined' ? password : '' %>"
            />
          </div>
          <div class="form-group">
            <label for="password2">Confirm Password</label>
            <input
              type="password"
              id="password2"
              name="password2"
              class="form-control"
              placeholder="Confirm Password"
              value="<%= typeof password2 != 'undefined' ? password2 : '' %>"
            />
          </div>
          <button type="submit" class="btn btn-outline-success btn-block">
            Register
          </button>
        </form>
        <p class="lead mt-4">Have An Account? <a href="/">Login</a></p>
      </div>
    </div>
  </div>

这是 user.js 路由

var express = require("express");
var router = express.Router();

//models
var Admin = require('../models/Admin');
var Students = require('../models/Students');


router.get("/register", (req, res) => {
  res.render("register");
});
router.post("/signup/:method", (req, res) => {
const method = req.params.method;
console.log(method);
    const { name, email, password, password2 } = req.body;

    if (method == "admin"){
        let errors = [];
        if (!name || !email || !password || !password2) {
            errors.push({ msg: "Please fill in all fields" });
          }
        
          //passwords match
          if (password !== password2) {
            errors.push({ msg: "Password do not match" });
          }
        
          //check password length
          if (password.length < 6) {
            errors.push({ msg: "Password should be at least 6 characters" });
          }
        
          if (errors.length > 0) {
            res.render("signup", {
              errors,
              name,
              password,
              password2,
              email,
            });
          } else {
            // Validation pass
            Admin.findOne({ email: email }).then((user) => {
              //User exist
              errors.push({ msg: "Email is already register" });
              if (user) {
                res.render("signup", {
                  errors,
                  name,
                  password,
                  password2,
                  email,
                });
              } else {
                const newAdmin = new Admin({
                  name,
                  email,
                  password,
                });
                // Hash password
                bcrypt.genSalt(10, (err, salt) => {
                  bcrypt.hash(newAdmin.password, salt, (err, hash) => {
                    if (err) throw err;
                    // set password to hashed
                    newAdmin.password = hash;
        
                    newAdmin
                      .save()
                      .then((user) => {
                        req.flash(
                          "success_msg",
                          "You are now registered and can log in"
                        );
                        res.redirect("/login?method=admin");
                      })
                      .catch((err) => console.log(err));
                  });
                });
              }
            });
          }
    }
    if (method == "student"){
        let errors = [];
        if (!name || !email || !password || !password2) {
            errors.push({ msg: "Please fill in all fields" });
          }
        
          //passwords match
          if (password !== password2) {
            errors.push({ msg: "Password do not match" });
          }
        
          //check password length
          if (password.length < 6) {
            errors.push({ msg: "Password should be at least 6 characters" });
          }
        
          if (errors.length > 0) {
            res.render("signup", {
              errors,
              name,
              password,
              password2,
              email,
            });
          } else {
            // Validation pass
            Students.findOne({ email: email }).then((user) => {
              //User exist
              errors.push({ msg: "Email is already register" });
              if (user) {
                res.render("signup", {
                  errors,
                  name,
                  password,
                  password2,
                  email,
                });
              } else {
                const newStudent = new Students({
                  name,
                  email,
                  password,
                });
                // Hash password
                bcrypt.genSalt(10, (err, salt) => {
                  bcrypt.hash(newStudent.password, salt, (err, hash) => {
                    if (err) throw err;
                    // set password to hashed
                    newStudent.password = hash;
        
                newStudent
                      .save()
                      .then((user) => {
                        req.flash(
                          "success_msg",
                          "You are now registered and can log in"
                        );
                        res.redirect("/login?usertype=student");
                      })
                      .catch((err) => console.log(err));
                  });
                });
              }
            });
          }
    }
  
});

router.get('/signup', (req,res)=>{
    var usertype = req.query.usertype;
    if(usertype == "admin"){
        res.render('signup', {method: "admin"},)
    }
    res.render('signup', {method: "student"},)
});
module.exports = router;

这是 register.ejs

<center>
    <a class="btn btn-info" href="/signup?usertype=admin" role="button">Admin</a><br>
  <br><a class="btn btn-info" href="/signup?usertype=student" role="button">Student</a><br>
  </center>

0 个答案:

没有答案
相关问题