Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js-如何处理TypeError:Cannot read属性的错误_Javascript_Php_Mysql_Node.js_Sockets - Fatal编程技术网

Javascript Node.js-如何处理TypeError:Cannot read属性的错误

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 }));

所以我有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.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)