是否可以在Node.js中监听对象实例化?

是否可以在Node.js中监听对象实例化?,第1张

是否可以在Node.js中监听对象实例化? 警告:SQL注入漏洞

这本身与您的问题无关,但这很重要-
您有一个巨大的SQL注入漏洞,任何人都可以对数据库做任何事情。

代替:

connection.query(  "SELECt * FROM player WHERe nick = '"  + data.login + "' AND pass = '" + data.pass + "'",  function (err, rows) {    //...  });

可以使用:

connection.escape(data.login)
connection.escape(data.pass)
到位的
data.login
data.pass

要么:

connection.query(  "SELECt * FROM player WHERe nick = ? AND pass = ?", [data.login, data.pass],  function (err, rows) {    // ...  });

它不仅更安全,而且实际上更容易阅读和理解。请参阅:转义查询的值在节点MySQL手册。

答案

现在,回到您的问题。关于Player构造函数,没有什么异步的,因此您的问题必须是其他问题。这里让我们感到奇怪的是,Player.js导出

User
(未定义)而不导出(即定义),
Player
所以令我惊讶的是,它甚至完全可以工作。或者您可能发布了与实际使用的代码不同的代码,这可以解释为什么您的竞态条件在代码中并不明显。

但是,如果您的Player构造函数正在进行一些异步调用,那么我建议添加一个回调参数并从构造函数中调用它:

var Player = function (id, name, map_id, x, y, connexion, callback) {    this.id = id;    this.name = name;    this.map_id = map_id ;    this.x = x;    this.y = y;    this.link = connexion;    this.toJson = function () {        return { 'id' : this.id, 'name' : this.name, 'map_id' : this.map_id, 'x' : this.x, 'y' : this.y        };    }    // some async call that you have to wait for    // symbolized with setTimeout:    setTimeout(function () {      if (callback && typeof callback === 'function') {        callback(this);      }    }, 1000);}

然后您可以将回调传递给构造函数,因此:

          } else {     var p = rows[0];     var dataRet = new Player(p.id, p.nick, p.map_id, p.x, p.y, connexion).toJson();     console.log(dataRet); } // Without setTimeout it wouldn't work because the object didn't have the time to instantiate setTimeout(function() {     socket.emit('login', dataRet); },1000);

可以更改为:

          } else {     var p = rows[0];     var dataRet = new Player(p.id, p.nick, p.map_id, p.x, p.y, connexion, function () {         socket.emit('login', dataRet);     }).toJson();     console.log(dataRet); }

但是在这里,正如我所说的,没有什么是异步的,

dataRet
甚至在运行setTimeout之前就已经设置好了,所以这不能解决您的问题,但可以回答您的问题。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5564801.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存