【发布时间】:2019-04-11 08:43:34
【问题描述】:
当密码与数据库的内容不匹配时,我不断收到此错误无法读取未定义的属性,但如果密码相同则一切正常。
let express = require('express');
let app = express();
let router = express.Router();
let users = require('./users.js');
let ejs = require('ejs');
let pg = require('pg');
let bodyParser = require('body-parser');
let mysql = require('mysql');
let connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "password",
port: 3306,
database: "nodeapp2"
});
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/input', function(req,res) {
res.sendFile(__dirname + '/views/input.html');
});
app.get('/login', function (req,res) {
res.sendFile(__dirname + '/views/login.html');
});
app.post('/logincred', function(req, res) {
console.log('req.body');
console.log(req.body);
connection.query("SELECT password FROM logins WHERE password = '"+req.body.password+"'",function(err, result){
if (err)
throw err;
if (result[0].password === req.body.password){
console.log(req.body.password);
console.log('password accepted');
res.redirect('/');
res.end()
} else {
res.redirect('/login')
res.write('login failed');
res.end()
}
});
});
如果我输入了错误的密码并且我点击了 else 子句,当我收到错误时我不确定为什么。
【问题讨论】:
-
您好,这里有一些问题会出现:)。首先,您很容易受到该查询的 SQL 注入攻击。其次,您的 SQL 处理程序是否会抛出空结果?如果不太可能,您需要在尝试访问它的属性之前检查结果是否存在。
-
这只是一个本地测试脚本,因为我正在学习节点并表达工作,所以 SQL 注入在这里不是一个问题,但我很感激提出它让我知道。返回的结果不为空。
标签: javascript mysql node.js express