【问题标题】:Sequelize delete query runs, but does not resolve PromiseSequelize delete 查询运行,但不解析 Promise
【发布时间】:2021-06-11 22:54:41
【问题描述】:

我有一个节点 js 服务器,它正在使用 Sequelize 从数据库中创建和删除。当我在“用户”表中创建新用户时,查询正常运行并且服务器返回响应。但是当我尝试从“用户”表中删除用户时,查询运行但承诺没有解决,因此我没有得到服务器的响应。这是 我的代码:

const { User } = require("./models")
const user = {id: "...."} //Parsed delete request from client, id is not undefined  
User.destroy({
      where: {
        id: user.id,
      },
    })
      .then(res.status(200).clearCookie("refresh-token"));
      .catch(res.status(400));

我在控制台中看到的:

Executing (default): DELETE FROM "Users" WHERE "id" = '6d3edbab-03b8-429b-b249-a9d3ba6bce7a'

过了一会儿:

DELETE /api/user/delete - - - - ms [2021-3-14 14:17:11]

我也从其他表中删除了一些东西,它们也可以工作,所以用户表似乎有些特别。奇怪的是,当我查看数据库时,我看到该记录已被删除。我不知道发生了什么。

感谢您的帮助!

【问题讨论】:

    标签: javascript node.js postgresql sequelize.js sequelize-cli


    【解决方案1】:

    我通过创建一个新函数来解决我的问题,该函数打开一个新的 Sequelize 连接并 使用它来删除数据库中的记录。这里是:

    function deleteUsr(id, res) {
      const { Sequelize } = require("sequelize");
    
      if (!/^([0-9a-z]){8}-([0-9a-z]){4}-([0-9a-z]){4}-([0-9a-z]){4}-([0-9a-z]){12}$/.test(id)) {
        res.status(400).send("Provide valid UUID")
      }
      const seq = new Sequelize(
        "connection string"
      );
    
      seq
        .authenticate()
        .then(console.log("yipeee"))
        .catch(err => console.error(err));
    
      seq
        .query(`delete from "Users" where id='${id}'`)
        .then(x => {
          res.status(200).clearCookie("refresh-token").send(x);
          seq.close();
        })
        .catch(err => {
          res.status(400).send(err);
          seq.close();
        });
    }
    

    如果您的输入未正确清理,请避免使用此功能,因为任何已签名的人都可以在使用此功能时删除任何用户。我从已验证的 jwt 访问令牌中获取 uuid 并将其与加密的刷新令牌进行比较,这样用户甚至无法在函数中输入任何内容。 希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2019-02-11
      • 2022-01-22
      • 2019-04-16
      相关资源
      最近更新 更多