将Mongoose模式验证错误标识为HTTP状态代码

时间:2018-05-16 13:29:32

标签: keystonejs

我利用Keystone.js提供轻量级的CMS和API。我正在检查List上的重复条目:

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管理员中是否有不同的方法为重复项提供友好的错误消息,并且能够为API调用返回正确的状态代码?

1 个答案:

答案 0 :(得分:0)

作为数据库版本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' }