当前位置: 首页 > 知识库问答 >
问题:

TypeError:无法读取D:\temp\u project\smpms\routes\users处未定义的属性“length”。js:31:18

慕乐池
2023-03-14

我正在尝试使用配置文件图片上载输入字段创建用户注册。这是我正在处理的文件。js。第31行出现错误:if(password.length

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;

错误:

类型错误:无法读取属性'长度'的未定义在D:\temp_project\smpms\路由\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)在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\index.js:281: 22在Function.process_params(D:\temp_project\smpms\node_modules\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\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个答案

范豪
2023-03-14

您正在检查密码的长度,即使它未定义。

尝试以下方法。

if (password && password.length < 6) {...}
 类似资料:
  • 为什么children.length导致未处理拒绝(TypeError):无法读取未定义的属性(读取'length'),特别是因为children.length的值已成功地显示在控制台上?

  • (节点:55028)UnhandledPromiserEjectionWarning:TypeError:无法读取位于/users/PatrickStanciu/WebStormProjects/AUTISMAssistant/Backend/API/Controllers/PaymentsController.js:1045:34 位于processTicksAndRejections(inte

  • 我试图只显示一个覆盖,如果我的搜索输入包含任何文本。 这是我的模板,其中我的输入字段是: : 当我在控制台中进行检查时,会更新我在输入字段中写入的任何文本。 然后,我尝试将此变量传递给另一个组件,该组件保存我的overlay div: Overlay.vue: 然而,这给我下面的错误: [Vue warn]:呈现错误:“TypeError:无法读取未定义的属性'length'” 我到底做错了什么?

  • 如果函数在组件中,那么一切都很好。如果我把它单独取出并导出到一个组件中,那么我会得到一个错误TypeError:不能读取未定义的属性(读取'reduce')

  • 下午好,我是新反应和Node.js和我有一个问题。 我在一个网页上有一个表格,你将在那里收到旅行的数据。travel_order模型中存在这些列(Id locales、name、date、time),但是“lockations name”列旨在使用Id列出这些地方的名称。此位置的ID在“地点ID”列中列出。但是,在列出时,它给我一个错误:“TypeError:不能读取未定义的属性'Designac

  • 问题内容: 我试图在ajax回调从REST api接收数据后设置组件的setState。这是我的组件构造函数代码 然后,我有一个如下所示的方法。 现在,这是我执行getAJAX请求的getPosts函数。 我想设置状态,但出现以下错误。 不太清楚是什么原因造成的。如果有人指出我正确的方向,那将真的很有帮助。提前致谢。 问题答案: 还绑定回调函数,以便回调内部指向React Component的上下