TypeError: невозможно прочитать свойство 'length' неопределенного значения в D: \ temp_project \ smpms \ routes \ users. js: 31: 18 - PullRequest
1 голос
/ 02 августа 2020

Я пытаюсь создать регистрацию пользователя с полем ввода для загрузки изображения профиля. Это файл, над которым я работаю user. js. Ошибка возникает для этой строки 31: if (password.length < 6) {

const express = require("express");
const router = express.Router();
const bcrypt = require("bcryptjs");
const passport = require("passport");
const multer = require('multer');
const path = require('path');


// Load User model
const User = require("../models/User");
const {forwardAuthenticated} = require("../config/auth");

// Login Page
router.get("/login", forwardAuthenticated, (req, res) => {
    res.render("login", {title: "Login", layout: "layout"});
});

// Register Page
router.get("/register", forwardAuthenticated, (req, res) => {
    res.render("register", {title: "Register", layout: "layout"});
});

// Register
router.post("/register", (req, res) => {
    const {name, email, password, password2} = req.body;
    let errors = [];

    if (!name || !email || !password || !password2) {
        errors.push({msg: "Please enter all fields"});
    }
    if (password.length < 6) {
        errors.push({msg: "Password must be at least 6 characters"});
    }
    if (password != password2) {
        errors.push({msg: "Passwords do not match"});
    }

    if (errors.length > 0) {
        res.render("register", {
            errors,
            name,
            email,
            password,
            password2,
            title: "Register",
            layout: "Layout",
        });
    } else {
        User.findOne({email: email}).then((user) => {
            if (user) {
                errors.push({msg: "Email already exists"});
                res.render("register", {
                    errors,
                    name,
                    email,
                    password,
                    password2,
                    title: "Register",
                    layout: "Layout",
                });
            } else {
                const newUser = new User({
                    name,
                    email,
                    password,
                    filepath
                });
                //Set The Storage Engine
                const storage = multer.diskStorage({
                    destination: './public/uploads/',
                    filename: function (req, file, cb) {
                        cb(null, file.fieldname + '-' + newUser._id + path.extname(file.originalname));
                    }
                });

                // Init Upload
                const upload = multer({
                    storage: storage,
                    limits: {fileSize: 1000000},
                    fileFilter: function (req, file, cb) {
                        checkFileType(file, cb);
                    }
                }).single('avatar');

                // Check File Type
                function checkFileType(file, cb) {
                    // Allowed ext
                    const filetypes = /jpeg|jpg|png|gif/;
                    // Check ext
                    const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
                    // Check mime
                    const mimetype = filetypes.test(file.mimetype);

                    if (mimetype && extname) {
                        return cb(null, true);
                    } else {
                        cb('Error: Images Only!');
                    }
                }


                newUser.filepath = storage;
                bcrypt.genSalt(10, (err, salt) => {
                    bcrypt.hash(newUser.password, salt, (err, hash) => {
                        if (err) throw err;
                        newUser.password = hash;
                        newUser
                            .save()
                            .then((user) => {
                                req.flash(
                                    "success_msg",
                                    "You are now registered and can log in"
                                );
                                res.redirect("/users/login");
                            })
                            .catch((err) => console.log(err));
                    });
                });
            }
        });
    }
});

// Login
router.post("/login", (req, res, next) => {
    passport.authenticate("local", {
        successRedirect: "/dashboard",
        failureRedirect: "/users/login",
        failureFlash: true,
    })(req, res, next);
});

// Logout
router.get("/logout", (req, res) => {
    req.logout();
    req.flash("success_msg", "You are logged out");
    res.redirect("/users/login");
});

module.exports = router;

Ошибка:

TypeError: невозможно прочесть свойство 'length' неопределенного значения в D: \ temp_project \ smpms \ routes \ users. js: 31: 18 в Layer.handle [как handle_request] (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ layer. js: 95: 5) в следующем (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ route. js: 137: 13) в Route.dispatch (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ route. js: 112: 3) на уровне. handle [как handle_request] (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ layer. js: 95: 5) в D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 281: 22 в Function.process_params (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 335: 12) в следующем (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 275: 10) в Function.handle (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 174: 3) в маршрутизаторе (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 47 : 12) в Layer.handle [как handle_request] (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ layer. js: 95: 5) в trim_prefix (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 317: 13) в D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 284: 7 в Function.process_params (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 335: 12) в следующем (D: \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 275: 10) в D : \ temp_project \ smpms \ node_modules \ express \ lib \ router \ index. js: 635: 15

Как я могу решить эту проблему?

1 Ответ

2 голосов
/ 02 августа 2020

Вы проверяете длину пароля, даже если он не определен.

попробуйте следующее.

if (password && password.length < 6) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...