Javascript Node.js-如何处理TypeError:Cannot read属性的错误
所以我有Node.js服务器,用户在index.PHP上登录PHP表单,其action=myweb.com:3000/因此它发送POST数据 在node.js服务器上,它检索POST变量,并根据POST数据中的ID从数据库中获取用户用户名 我的问题是,当有人直接在地址栏中键入myweb.com:300时,服务器崩溃,而我是Node.js新手,所以我不理解这个问题。 Server.js:Javascript Node.js-如何处理TypeError:Cannot read属性的错误,javascript,php,mysql,node.js,sockets,Javascript,Php,Mysql,Node.js,Sockets,所以我有Node.js服务器,用户在index.PHP上登录PHP表单,其action=myweb.com:3000/因此它发送POST数据 在node.js服务器上,它检索POST变量,并根据POST数据中的ID从数据库中获取用户用户名 我的问题是,当有人直接在地址栏中键入myweb.com:300时,服务器崩溃,而我是Node.js新手,所以我不理解这个问题。 Server.js: app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.urlencoded({ extended: false }));
app.get('/', function(req, res){
res.render('home.jade');
});
var ip = "";
var email = "";
var username = "";
var password = "";
var user_ids = "";
//Assign POST variables;
app.post('/',function(req,res, err){
email=req.body.email;
password=req.body.pass;
user_ids=req.body.userid;
ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
res.redirect("/");
});
//Client connection starts;
io.sockets.on('connection', function (socket) {
socket['final_user'] = "def";
//Get users username based on his ID;
db.query("SELECT username FROM users WHERE id='"+user_ids+"'", function(error, results, fields)
{
socket['final_user'] = results[0].username;
db.query("INSERT INTO users_online (userID, username, ip) VALUES ('"+user_ids+"', '"+socket['final_user']+"', '"+ip+"')");
});
// Set server variables to blank since the username is already retrieved.
ip = "";
email = "";
username = "";
password = "";
user_ids = "";
socket.on('disconnect', function(){
db.query("DELETE FROM users_online WHERE username='"+socket['final_user']+"'");
});
});
和错误:
注意:我已经删除了一些不重要的代码,这些代码只是一些基本功能,如检索消息等
因此:
这个错误意味着什么?
如何处理Node.js中的此类错误?
还有一个次要问题:
如果用户连接并且我没有将服务器变量重置为空,如果任何其他用户类型:3000直接在浏览器中,服务器不会崩溃,但键入它的用户可以通过PHP表单使用最后加入的用户的ID和用户名。这意味着结果[0]未定义,并且您正在尝试访问未定义变量的属性用户名。。。若要处理此问题,请在继续之前检查结果和结果[0]是否存在。您应该仅在具有用户ID的情况下运行查询。如果未设置用户ID,则将是一个无效的查询,然后您的结果将不会有任何“username”属性。好的,这样做有效,不会再有错误。谢谢,这实际上比我想象的更容易修复。
> /var/www/myweb.com/html/node_modules/mysql/lib/protocol/Parser.js:82
> throw err;
> ^ TypeError: Cannot read property 'username' of undefined
> at Query._callback (/var/www/myweb.com/html/server.js:1:1456)
> at Query.Sequence.end (/var/www/myweb.com/html/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24)
> at Query._handleFinalResultPacket (/var/www/myweb.com/html/node_modules/mysql/lib/protocol/sequences/Query.js:143:8)
> at Query.EofPacket (/var/www/myweb.com/html/node_modules/mysql/lib/protocol/sequences/Query.js:127:8)
> at Protocol._parsePacket (/var/www/myweb.com/html/node_modules/mysql/lib/protocol/Protocol.js:271:23)
> at Parser.write (/var/www/myweb.com/html/node_modules/mysql/lib/protocol/Parser.js:77:12)
> at Protocol.write (/var/www/myweb.com/html/node_modules/mysql/lib/protocol/Protocol.js:39:16)
> at Socket.<anonymous> (/var/www/myweb.com/html/node_modules/mysql/lib/Connection.js:82:28)
> at Socket.emit (events.js:95:17)
> at Socket.<anonymous> (_stream_readable.js:764:14)