【发布时间】:2020-06-25 07:03:06
【问题描述】:
这是续集请求:
models.client
.create(clientInformation)
.then(clientCreated => {
logger.info("clientCreated", JSON.stringify(clientCreated));
res.status(200).json(clientCreated);
})
.catch(error => {
logger.error("error", JSON.stringify(error));
res.status(400).json(error);
});
这是客户端模型,
module.exports = function(sequelize, DataTypes) {
var client = sequelize.define(
"client",
{
id: {
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
autoIncrement: true,
unique: true
},
nomClient: DataTypes.STRING,
numTel: {
type: DataTypes.INTEGER,
unique: true
},
email: {
type: DataTypes.STRING,
unique: true
},
addresse: {
type: DataTypes.STRING,
unique: true
},
ville: DataTypes.STRING
},
{ timestamps: true }
);
return client;
};
我故意在 req.body 中发送无效数据,以实现明确的错误处理。所以在响应中,我明白了:
{
"name": "SequelizeDatabaseError",
"parent": {
"name": "error",
"length": 177,
"severity": "ERROR",
"code": "22003",
"file": "d:\\pginstaller_12.auto\\postgres.windows-x64\\src\\backend\\utils\\adt\\numutils.c",
"line": "253",
"routine": "pg_strtoint32",
"sql": "INSERT INTO \"clients\" (\"id\",\"nomClient\",\"numTel\",\"email\",\"addresse\",\"ville\",\"createdAt\",\"updatedAt\") VALUES (DEFAULT,$1,$2,$3,$4,$5,$6,$7) RETURNING *;",
"parameters": [
"Sam",
"5578757867",
"eazfafe@gmail.com",
"Nabeul",
"RueDuMerle",
"2020-03-13 08:53:41.214 +00:00",
"2020-03-13 08:53:41.214 +00:00"
]
},
"original": {
"name": "error",
"length": 177,
"severity": "ERROR",
"code": "22003",
"file": "d:\\pginstaller_12.auto\\postgres.windows-x64\\src\\backend\\utils\\adt\\numutils.c",
"line": "253",
"routine": "pg_strtoint32",
"sql": "INSERT INTO \"clients\" (\"id\",\"nomClient\",\"numTel\",\"email\",\"addresse\",\"ville\",\"createdAt\",\"updatedAt\") VALUES (DEFAULT,$1,$2,$3,$4,$5,$6,$7) RETURNING *;",
"parameters": [
"Sam",
"5578757867",
"eazfafe@gmail.com",
"Nabeul",
"RueDuMerle",
"2020-03-13 08:53:41.214 +00:00",
"2020-03-13 08:53:41.214 +00:00"
]
},
"sql": "INSERT INTO \"clients\" (\"id\",\"nomClient\",\"numTel\",\"email\",\"addresse\",\"ville\",\"createdAt\",\"updatedAt\") VALUES (DEFAULT,$1,$2,$3,$4,$5,$6,$7) RETURNING *;",
"parameters": [
"Sam",
"5578757867",
"eazfafe@gmail.com",
"Nabeul",
"RueDuMerle",
"2020-03-13 08:53:41.214 +00:00",
"2020-03-13 08:53:41.214 +00:00"
]
}
在记录的错误中是这样的:
DatabaseError [SequelizeDatabaseError]: value "5578757867" is out of range for type integer
at Query.formatError (C:\work\ViwoneSavServer\Backend\node_modules\sequelize\lib\dialects\postgres\query.js:366:16)
at C:\work\ViwoneSavServer\Backend\node_modules\sequelize\lib\dialects\postgres\query.js:72:18
at tryCatcher (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\util.js:16:23)
at Promise._settlePromiseFromHandler (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\promise.js:547:31)
at Promise._settlePromise (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\promise.js:604:18)
at Promise._settlePromise0 (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\promise.js:649:10)
at Promise._settlePromises (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\promise.js:725:18)
at _drainQueueStep (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\async.js:93:12)
at _drainQueue (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\async.js:86:9)
at Async._drainQueues (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (C:\work\ViwoneSavServer\Backend\node_modules\bluebird\js\release\async.js:15:14)
我的问题是记录的消息中存在的信息:
值“5578757867”超出整数类型的范围
在响应正文中找不到!
所以这是我的问题:
问题 1:为什么记录的错误与响应中的错误不同,尽管它是同一个对象?
问题 2: 如何仅访问错误消息并将其发送到响应中?
注意: SO 中关于 sequelize 错误处理的可用答案不提供对此的响应。
比如大部分答案是这样的:
sequelize.create({
name: req.body.name,
email: req.body.email })
.then((data)=> { res.send('mysuccess message'); })
.catch(Sequelize.UniqueConstraintError => {
res.send('myerrormessage');
}));
换句话说,我需要检查每种错误类型吗?
【问题讨论】:
-
我不知道它是否可以帮助您,但我尝试使用您的错误处理程序在响应中发送错误并且它有效。我得到了一个与你的非常不同的错误对象。也许是续集?
-
或其他一些包?
-
@Eggon 也许,我有 Sequelize 5.21.2
-
我有 Sequelize 5.21.3 和 @types/sequelize 4.28.3。
标签: javascript node.js express error-handling sequelize.js