【问题标题】:Sequelize throws generic error messages when querying the databaseSequelize 在查询数据库时抛出一般错误消息
【发布时间】:2022-01-20 02:38:31
【问题描述】:
Sequelize version: 6.13.0
Database version: PostgreSQL 13.3

每当查询出现问题时,Sequelize 都不会告诉我实际问题。例如,this old Stack Overflow post 显示 Sequelize 显示列未知的错误。就我而言,我收到一条通用错误消息,需要手动检查查询和我的数据库表以找出问题所在。这是一个例子:

const user = await User.findByPk(params.id);

const settings = await Setting.findAll({ attributes: ['id', 'key', 'defaultValue'] });
const userSettings = await user.getUserSettings({ attributes: ['id', 'key', 'value'] });

这将产生以下 SQL:

Executing (default): SELECT "id", "name", "email", "password", "referralCode", "referredByUserId", "bio", "twitterUrl", "facebookUrl", "instagramUrl", "createdAt", "updatedAt" FROM "Users" AS "User" WHERE "User"."id" = '1';
Executing (default): SELECT "id", "key", "defaultValue" FROM "Settings" AS "Setting";
Executing (default): SELECT "id", "key", "value" FROM "UserSettings" AS "UserSetting" WHERE "UserSetting"."userId" = 1;

这是错误信息:

/home/user/app/backend/node_modules/sequelize/lib/dialects/postgres/query.js:76
    const errForStack = new Error();
                        ^
Error: 
    at Query.run (/home/user/app/backend/node_modules/sequelize/lib/dialects/postgres/query.js:76:25)
    at /home/user/app/backend/node_modules/sequelize/lib/sequelize.js:642:28
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at PostgresQueryInterface.select (/home/user/app/backend/node_modules/sequelize/lib/dialects/abstract/query-interface.js:979:12)
    at Function.findAll (/home/user/app/backend/node_modules/sequelize/lib/model.js:1789:21)
    at HasMany.get (/home/user/app/backend/node_modules/sequelize/lib/associations/has-many.js:228:21)

我不得不手动检查我的数据库表,我发现 key 列不存在于 UserSettings 表中。

为什么 Sequelize 没有在我的任何模型上告诉我这一点?有没有我遗漏的配置?

【问题讨论】:

  • 您可以在 Sequelzie 错误中使用额外的道具来输出带有更多详细信息的错误
  • @Anatoly 感谢您的回复。我在文档的哪里可以找到它?
  • @Anatoly 谢谢。不幸的是,这并不能解决我的问题。问题是包 Sequelize 正在抛出一般错误消息。我没有提出异常,所以我没有配置它的选项。我想知道为什么 Sequelize 本身在为其他人工作时没有告诉我具体的错误消息。
  • 抓到错误并查看错误对象了吗?

标签: postgresql express sequelize.js


【解决方案1】:

正如@Anatoly 在 cmets 中提到的,我只需要在 try-catch 块中捕获错误,例如:

try {
  const user = await User.findByPk(params.id);

  const settings = await Setting.findAll({ attributes: ['id', 'key', 'defaultValue'] });
  const userSettings = await user.getUserSettings({ attributes: ['id', 'key', 'value'] });
} catch (e) {
  console.log(e);
  next(e);
}

来自 Ruby on Rails 背景,我原以为错误会显示在运行 Express 服务器的终端的输出中,但事实并非如此。

感谢@Anatoly,现在调试会容易很多!

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2018-11-30
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多