使用Postgres和Knex更新表中的datetime值

时间:2019-07-17 06:04:14

标签: postgresql knex.js

我想将“访问令牌”到期日期时间更新到“用户”表中,以便检查访问令牌是否有效以重置密码。 因此,我使用moment传递了一个datetime字符串值。

但是它无法更新日期时间,没有错误消息。

查找'forgotPassword'函数无需更新'resetPasswordExpires'。

我试图将'resetPasswordExpires'列类型设置为timeStamp。没用

  exports.forgotPassword = (req, res) => {
   const { username, email, inOneHour } = req.body;

   return knex('users')
    .where({ username, email })
    .first()
    .then(async user => {
      if (user) {
        const token = await util.getRandomToken(user);
        const mailOptions = {
          ...
        };

        return knex('users')
          .where({ username })
          .first()
          .update({
            resetPasswordToken: token,
            resetPasswordExpires: inOneHour,
          })
          .then(() => {
            sendEmail(mailOptions)
              .then(() => {
                ...
              })
              .catch(err => {
                ...
              });
          });
      }
      ...
    });
};
{{1}}

谢谢!!

1 个答案:

答案 0 :(得分:1)

好吧,我确定它失败的原因只是您没有捕获到异常。

首先为KNEX添加错误处理程序

return knex('users')
          .where({ username })
          .first()
          .update({
            resetPasswordToken: token,
            resetPasswordExpires: inOneHour,
          })
          .then(() => {
            // Do your work
          })
          .catch((err) => {
            // print out the error
          });

现在开始解决,postgres不支持日期格式为.format('MMMM Do YYYY, HH:mm:ss');,因此您将无法使用此格式。 您当前的格式会产生类似July 18th 2019, 19:03:41

的输出

您可以使用.format('MMMM DD YYYY, HH:mm:ss'); 作为初学者,此创建日期为July 18 2019, 19:03:41。但是我建议您只做.format(),这样就不必担心每次在代码中使用它时的格式。