如何解决类型错误:无法在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 举报,一经查实,本站将立刻删除。