keystonejs - 将 Mongoose 模式验证错误识别为 HTTP 状态代码
问题描述
我正在利用 Keystone.js 来提供轻量级的 CMS 和 API。我正在检查列表中的重复条目,如下所示:
Registration.schema.post('save', function(error, registration, next) {
if (error && error.name === 'MongoError' && error.code === 11000) {
error = Error(`409|${ registration['email'] } is already registered`);
}
next(error);
});
我正在从错误消息中解析状态代码以在我的 API 端点中返回。
是否有其他方法可以为 Keystone admin 中的重复项提供友好的错误消息,并能够为 API 调用返回正确的状态代码?
解决方案
作为数据库版本 v3.6.9
$ mongod --version
db version v3.6.9
git version: 167861a164723168adfaaa866f310cb94010428f
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
allocator: tcmalloc
modules: none
build environment:
distmod: debian81
distarch: x86_64
target_arch: x86_64
我认为您应该检查ValidationError
财产MongoError
,如下所示:
RegistrationSchema.create(obj)
.then(...)
.catch(err => console.error('[registration] output: ', err);
我们假设email
之前没有提到过来模拟is required
错误。
你会看到这样的:
[registration] error: { ValidationError: Registration validation failed: email: Path `email` is required.
at ValidationError.inspect (....)
errors:
{
email:
{ Path `email` is required.
...
message: 'Path `email` is required.',
name: 'ValidatorError',
properties: [Object],
kind: 'required',
path: 'email',
value: [],
reason: undefined,
'$isValidatorError': true } },
_message: 'Registration validation failed',
name: 'ValidationError' }
推荐阅读
- sql-server - 不匹配时 MSSQL 合并 THEN 从源插入 ID
- c++ - 使用 Qt 使 PC Lint Plus 更好地工作 - 使用哪些选项(或者甚至可能有 .lnt 文件)?
- node.js - nodejs imap 只读日历事件
- java - 如何在 JVM 中多次加载 java.util.TimeZone
- haskell - 关于优化 GHC 中的单构造函数数据类型的说明
- php - 如何获取包含特定子字符串的数组的键?
- r - 从 R 中嵌套模型的几个列表列中获取预测
- c++ - 如何从 Lua C API 中的函数获取多个返回值?
- amazon-web-services - 在 aws 服务中使用 Firebase 身份验证
- javascript - Kendo UI Grd 与 kendo Upload