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)
我必须手动检查我的数据库表,并且发现 UserSettings 表中不存在 key
列。
为什么 Sequelize 在我的任何模型上都没有告诉我这一点?我缺少一些配置吗?
最佳答案
正如 @Anatoly 在评论中提到的,我只需要捕获 try-catch block 中的错误,例如:
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,现在调试会容易多了!
关于postgresql - Sequelize 在查询数据库时抛出一般错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70748636/