如何修复 JSON.parse() 命令中不需要的异常
How to fix unwanted exceptions from JSON.parse() commands
当用户信息正确时可以进行身份验证,但输入错误的详细信息后服务器会崩溃
passport.use(new LocalStrategy({
usernameField: 'password',
passportField: 'username'
},
function(username, password, done) {
con.query("SELECT * FROM uids WHERE list =" +"'" + username + "'", function (err, result) {
if (err) done(err);
var clean = JSON.parse(JSON.stringify(result))[0].list //Expected Result : test2
//from [ RowDataPacket { list: 'test2' } ]
//no user was found
if(username === clean) {
//Success
return done(null, true);
} else {
//Wrong password
return done(null, false);
}
});
}
));
来自服务器的错误:
throw err; // Rethrow non-MySQL errors
^
TypeError: Cannot read property 'list' of undefined
我知道出了什么问题,但我不知道是否有检查列表是否存在的功能
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "dawg111",
password: "poopingboy111",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connection to Database is ok!");
});
const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy({
usernameField: 'username',
passportField: 'password'
},
function(username, password, done) {
con.query('SELECT * FROM uids WHERE list = ?', [username], function (error, results, fields) {
if (error) throw error;
console.log(results);
});
}
));
这里不需要 JSON.stringify
或 JSON.parse
。您没有 JSON。 results
应该已经是一个数组,因此您可以直接使用它而无需将它与 JSON.
相互转换
如果您想检查是否确实有一个结果,那么 if (results)
将确保结果变量已定义(尽管我怀疑它总是会定义,但有时可能其中没有条目)。
因此,如果定义了 results
,并且您想检查行数,那么 if (results.length > 0)
就可以完成这项工作 - 这就是您检查任何 JavaScript 的长度的方式数组。
总的来说,您可以这样做:
con.query('SELECT * FROM uids WHERE list = ?', [username], function (error, results, fields) {
if (error) throw error;// ok
console.log(results); // [ RowDataPacket { list: 'test2' } ]
if (results.length > 0){
var clean = results[0].list //Expected Result : test2
if(username === clean) {
//Success
return done(null, true);
//...etc
当用户信息正确时可以进行身份验证,但输入错误的详细信息后服务器会崩溃
passport.use(new LocalStrategy({
usernameField: 'password',
passportField: 'username'
},
function(username, password, done) {
con.query("SELECT * FROM uids WHERE list =" +"'" + username + "'", function (err, result) {
if (err) done(err);
var clean = JSON.parse(JSON.stringify(result))[0].list //Expected Result : test2
//from [ RowDataPacket { list: 'test2' } ]
//no user was found
if(username === clean) {
//Success
return done(null, true);
} else {
//Wrong password
return done(null, false);
}
});
}
));
来自服务器的错误:
throw err; // Rethrow non-MySQL errors
^
TypeError: Cannot read property 'list' of undefined
我知道出了什么问题,但我不知道是否有检查列表是否存在的功能
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "dawg111",
password: "poopingboy111",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
console.log("Connection to Database is ok!");
});
const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy({
usernameField: 'username',
passportField: 'password'
},
function(username, password, done) {
con.query('SELECT * FROM uids WHERE list = ?', [username], function (error, results, fields) {
if (error) throw error;
console.log(results);
});
}
));
这里不需要 JSON.stringify
或 JSON.parse
。您没有 JSON。 results
应该已经是一个数组,因此您可以直接使用它而无需将它与 JSON.
如果您想检查是否确实有一个结果,那么 if (results)
将确保结果变量已定义(尽管我怀疑它总是会定义,但有时可能其中没有条目)。
因此,如果定义了 results
,并且您想检查行数,那么 if (results.length > 0)
就可以完成这项工作 - 这就是您检查任何 JavaScript 的长度的方式数组。
总的来说,您可以这样做:
con.query('SELECT * FROM uids WHERE list = ?', [username], function (error, results, fields) {
if (error) throw error;// ok
console.log(results); // [ RowDataPacket { list: 'test2' } ]
if (results.length > 0){
var clean = results[0].list //Expected Result : test2
if(username === clean) {
//Success
return done(null, true);
//...etc