javascript - 登录无法从 req.body 获取值,导致无法读取未定义的属性“密码”的问题
问题描述
希望有人可以帮助我,请我无法从 login.hbs 中的表单中获取 req.body 的值,并报告错误:无法读取未定义的属性“密码”。
我已经搜索了很长时间,但仍然无法修复它。
我还有另外一个页面叫做register.hbs,格式和login.hs类似,其他部分也差不多,但是register里面的form可以发布信息,可以通过req.body获取,但是这部分就不一样了关于登录。
像这样的控制台报告:[对象:空原型] {帐户:'11@gmail.com',密码:'1234qQ'}未定义未定义[](节点:20204)UnhandledPromiseRejectionWarning:TypeError:无法读取属性
(节点:20204)[DEP0018] DeprecationWarning:未处理的承诺拒绝将终止 Node.js 进程并使用非零退出代码。
//login.js
function signupbutton(){
parent.location.href="/register";
}
function validate(){
var username=document.getElementById('usr');
var password=document.getElementById('pwd');
//username and password cannot be empty
if(username.value.trim()==""){
alert("please fill in your account");
username.style.border = "solid 2px blue";
return false;
}
else if(password.value.trim()==""){
alert("please enter your password");
password.style.border = "solid 2px blue";
return false;
}
else{
//check database
return auth.js;
}
}
//auth.js
exports.login = async (req,res) =>{
console.log(req.body);
const{mail, Password} = req.body;
console.log(mail);
console.log(Password);
db.query('SELECT * FROM users WHERE emailaddress=? ',[mail],async(error,results)=>{
console.log(results);
if(error){
console.log(error);
}
if(!results || !(await bcrypt.compare(Password, results[0].password)) ){
res.status(400).render('login',{
message: 'Email or password is incorrect'
})
}
else {
const id = results[0].id;
const token = jwt.sign({ id:id }, 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("/register");
}
});
}
//app.js
const express = require("express");
const path = require("path");
const mysql = require("mysql");
const dotenv = require("dotenv");
const cookieParser = require ("cookie-parser");
dotenv.config({
path: './.env'
});
const app = express();
const db = mysql.createConnection({
host: process.env.DATABASE_HOST,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE
//online server, local host just about where the database is
});
const publicDirectory = path.join(__dirname, './public');
app.use(express.static(publicDirectory));
//grab the data
app.use(express.urlencoded({ extended:false }));
app.use(express.json());
app.use(cookieParser());
app.set('view engine','hbs');
db.connect((error)=>{
if(error){
console.log(error)
}
else{
console.log("mysql connected...")
}
});
app.use('/', require('./routes/pages'));
app.use('/auth',require('./routes/auth'));
app.listen(5001, ()=>{
console.log("Server started on Port 5001");
})
//route.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;
//pages.js
const express = require('express');
const router = express.Router();
router.get('/register',(req,res)=>{
res.render('register');
});
router.get('/login',(req,res)=>{
res.render('login');
});
module.exports = router;
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="x-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="/style.css"/>
<title>Voting Platform</title>
<link ref="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css"/>
<script src="/js/login.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="login1">
<div class="thesignform">
<form onsubmit=" validate(); return false;" action="/auth/login" method="POST" class="login" id="login">
<h1>Log in</h1>
<img class="iconp" src="/img/icon"}}
</div>
</div>
</body>
</html>
解决方案
推荐阅读
- elastic-stack - 如何通过 kibana 中的堆栈监控设置 filebeat 监控?
- nginx - Nginx 子域仅在添加端口号时有效
- ios - 崩溃异常:NSInvalidArgumentException -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: 尝试从对象 [1] 插入 nil 对象
- javascript - 无法读取未定义 npm ERR 的属性“toLowerCase”!代码生命周期
- google-cloud-platform - 创建 bigquery 身份验证。在使用 python 存在源数据集的不同云项目中的视图
- docker-compose - 使用 docker compose 配置的 skaffold init 失败并出现“Nil Pointer Dereference”错误
- javascript - msal.js 包的 loginRedirect() 方法导致 'TypeError: Cannot read property 'then' of undefined'
- ios - 如何解决来自 Cocoapods lint 命令的链接器错误?
- r - 直方图中的年龄范围显示(R)
- ruby-on-rails - 验证时对整个范围应用区分大小写