【问题标题】:NodeJS : wait for a variable to be created before calling a functionNodeJS:在调用函数之前等待创建变量
【发布时间】:2021-12-25 01:26:27
【问题描述】:

我对 NodeJS 有点陌生,并且正在为个人项目使用 API。我需要在数据库中创建帐户,然后向人们发送确认电子邮件。因此,创建帐户的路线首先是在数据库中插入数据,然后获取 insertId 以创建令牌,然后发送一封包含令牌的确认电子邮件。

我正在使用 mysql 包(版本 2.18.1)中的 db.query() 与数据库交互,该数据库是来自 GCloud 的 MySQL 数据库:

db.query("INSERT INTO user SET ?", [data], async (iErr, result) => {
    if (iErr) {
        res.status(410).jsonp({msg:iErr});
        next(iErr);
    } else {
        const insertedId = result.insertId;
        let emailToken = await getEmailToken(insertedId);
        // then sending the email using another async method
    }

但是,发送的令牌内部没有 id,就像 getEmailToken() 使用“未定义”作为参数一样。

现在有人解决了吗?

谢谢。

编辑:同样的问题出现在电子邮件中,我在其中放置了 req.body.name。它在电子邮件中以“未定义”的形式发送,但在调用路由时给出(我将其存储在数据库中)。

【问题讨论】:

  • 您需要提供更多详细信息。你用的是什么数据库?您使用什么库从 Node.js 连接到数据库?请编辑问题并使用此信息进行更新。
  • 为什么电子邮件令牌需要其中的 id?该函数的名称表明它会给你一个令牌,给定一个 id,所以它返回一个令牌,然后你可以用它做任何你需要的事情,包括“将它和你已经拥有的 id 一起发送到其他地方”?也就是说,请始终查看您的控制台:此代码将打印错误。
  • 嘿,对不起,我是 StackOverflow 的新手,我编辑了我的帖子添加了信息。
  • 电子邮件令牌是一个确认令牌。我需要通过电子邮件发送,以便用户验证他们的帐户。这就是为什么我需要生成一个唯一的令牌以通过电子邮件将其发送给用户,其中包含他们的 id。

标签: node.js email variables asynchronous


【解决方案1】:

如果你使用mysql包,根据doc,db.query的回调获取3个参数第一个错误第二个结果第三个字段。像这样:

db.query("INSERT INTO user SET ?", [data], async (err, result, fields) => {}

【讨论】:

  • 我在发帖时犯了一个错误,代码中使用了«结果»。刚刚在帖子里改了。
  • 好的,抱歉。我添加了新的解决方案:)
  • 你是对的。但是,问题保持不变(我已经编辑了我的帖子)
【解决方案2】:

mysql包README记录了获取新插入ID的方法:https://github.com/mysqljs/mysql#getting-the-id-of-an-inserted-row

您的代码中的回调存在几个问题:

  • 看起来参数的顺序可能是错误的 - 文档有这样的 - 注意结果对象是第二个参数,而不是第三个。因此,您可能会在“行”下获得“结果”。

connection.query('INSERT INTO posts SET ?', {title: 'test'}, function (error, results, fields)

  • mysql 库使用 insertId。这很容易误认为insertedId,在MongoDB中使用,但它们不是同一个词。

【讨论】:

  • 正如我上面所说,我犯了一个错误。我正在使用好的论据。然而,在函数结束时,我向用户发送了一个响应 200,其中包含了插入的 Id,它可以工作,但它在令牌生成函数内部不起作用。
  • 您确定它适用于“insertedId”,而不是 insertId? mysql驱动源码使用insertId:github.com/mysqljs/mysql/blob/…
  • 是的,它有效。我在响应和令牌生成函数中使用相同的变量。
猜你喜欢
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2021-02-25
相关资源
最近更新 更多