类型错误:无法在exports.login 中读取未定义的属性“密码” - Node.js

问题描述

我正在尝试创建一个登录页面,该页面将查看 MysqL 中的 User_Account 表并确定用户的凭据是否存在。 User_Account 包含以下列:用户名、密码、电话号码。

当我使用表中不存在的凭据登录时收到此错误,而我应该收到“凭据不正确”。

我遇到的错误

Server started 3001
MysqL connected
[]
TypeError: Cannot read property 'password' of undefined
    at exports.login (/home/moe/Desktop/NodeMysqL/controllers/auth.js:57:69)
    at processticksAndRejections (internal/process/task_queues.js:97:5)

app.js:

const express = require('express'); 
const MysqL = require('MysqL'); 
const path = require('path');
const http = require('http');
const fs = require('fs');
const dotenv = require('dotenv'); 
const cookieParser = require('cookie-parser'); 
dotenv.config({path: './.env'}); 

const db = MysqL.createConnection({
      host    : process.env.DATABASE_HOST,user    : process.env.DATABASE_USER,password: process.env.DATABASE_PASSWORD,database: process.env.DATABASE
    
});

const app = express(); 
const publicDirectory = path.join(__dirname,'./public'); 
app.use(express.static(publicDirectory)); 
app.use(express.urlencoded({extended: false })); 
app.use(express.json()); 
app.use(cookieParser()); 
app.set('view engine','hbs'); 

db.connect((err) => {
    if(err){
        throw err; 
    }
    console.log('MysqL connected'); 
});

app.use('/',require('./routes/pages')); 
app.use('/auth',require('./routes/auth'));

app.listen('3001',() => { 
    console.log('Server started 3001');  
}); 

路由/auth.js:

const express = require('express'); 
const authController = require('../controllers/auth'); 
const router = express.Router(); 

router.post('/login',authController.login); 
router.post('/register',authController.register )

module.exports = router; 

控制器/auth.js:

const MysqL = require("MysqL"); 
const jwt = require('jsonwebtoken'); 
const bcrypt = require('bcryptjs'); 
const express = require('express'); 
const router = express.Router(); 

const db = MysqL.createConnection({
          host    : process.env.DATABASE_HOST,database: process.env.DATABASE
});
const {
    promisify 
} = require('util'); 

const query = promisify(db.query.bind(db)); 

exports.login = async (req,res) => {
    try {
        const { 
            username,password 
        } = req.body; 

        const results = await query ('SELECT * FROM User_Account WHERE username = ?',[username]); 

        console.log(results);     
        if (!results || !(await bcrypt.compare(password,results[0].password))) {
                res.status(401).render('login',{
                    message: 'Credentials are incorrect'
                });
        } else {
                const user = results[0].user; 
                const token = jwt.sign({user: username },process.env.JWT_SECRET,{
                    expiresIn: process.env.JWT_EXPIRES_IN
                }); 

                console.log("the token is: " + token); 
                const cookieOptions = {
                    expires: new Date(
                        Date.Now() + process.env.JWT_COOKIE_EXPIRES * 24 * 60 * 60 * 1000
                    ),httpOnly: true
                }
                res.cookie('jwt',token,cookieOptions); 
                res.status(200).redirect("/"); 
            }
    } catch (error) {
        console.log(error);   
    }
} 

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)