承诺Node.js mysql

时间:2017-01-03 16:51:58

标签: javascript mysql node.js

我是node.js的新手,我想在学校项目中使用promises。 我在网上和堆栈上找到了几件事:Use promise to process MySQL return value in node.js

但我有一个问题,到目前为止,这就是我所拥有的:

router.post('/matchaSearch', function(req, res) {
  var username = session.uniqueID;
  var searcherPackage = {};

  function userAgeCheck(randomParam) {
    return new Promise((resolve, reject) => {
      pool.getConnection((err, connection) => {
        var query = 'SELECT username, age, orientation, sex FROM usersinfo WHERE username != ?';
        connection.query(query, [username], (err, rows, fields) => {
          connection.release();
          return err ? reject(err) : resolve(rows);
        });
      });
    });
  }

  userAgeCheck('username')
    .then((rows) => {
      /*console.log(rows);*/
      searcherPackage = rows;
      console.log(searcherPackage);
      // do stuff
    }).catch((err) => {
      throw err;
    });
});

这对我有用,除了我(用户名)之外,它会返回db中的所有内容。但对我来说这是不对的。为什么给一个随机的参数是好的?

所以我应该提供用户名'作为param而不是' randomParam'但如果我这样做,查询将返回我的一切,而不是除了我(用户名)以外的所有人。 所以我摆脱了它,只是给了它' randomParam'它起作用了。 你能解释一下吗?我这样做了吗?如果是这样,我可以继续做我的项目。 非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

当您致电userAgeCheckuserAgeCheck('username'))时,您传递一个参数:包含单词" username"的字符串文字。这会被分配到randomParam,然后您永远不会用户将其呈现为毫无意义。

您可以在脚本顶部定义一个变量:var username = session.uniqueID;

进行查询时,您将username变量的值作为username != ?的占位符值传递。

这是session.uniqueId的值,因为它从更广泛的范围读取username变量。

因此,您将获得所有结果,但用户名为session.uniqueId中的用户名的除外。

如果您将randomParam重命名为username,则会有一个名为username的新本地变量,其值为"username"

因此,您将获得所有结果,但用户名为用户名的字段除 username

如果您想将用户名作为参数传递,则需要将userAgeCheck('username')更改为userAgeCheck(username)。即用变量名替换字符串文字。