преобразование сообщений об ошибках из mon goose validation в удобные для пользователя сообщения - PullRequest
0 голосов
/ 05 августа 2020

Здравствуйте, я новичок, пытаюсь изучить узел. Я пытаюсь проверить данные, введенные пользователями на странице регистрации. Это моя схема goose

const schema = mongoose.Schema({     

    fname:{type:String,
        required:[true,"enter a first name"]}, 
    lname:{type:String,
        required:[true,"enter a last name "]},
    email:{type:String,
        required:[true,"email is required"],
        unique:true,
        trim:true,
        lowercase:true,
    validate(value){
        if(!validator.isEmail(value)){
            throw new Error("Email is invalid");
        }

    }
    }, 
    pass:{type:String,required:[true,"please enter a passkey"],minlength:[8,"enter atleast 8 characters"]} 

}); 

, как видите, я пытаюсь проверьте некоторые поля и проверьте наличие ошибок

usersave.save((err,doc)=>{
    if(err){
        console.log(err);
        res.render("register",{err:err}
    }
    else{console.log(doc);res.send("success")}
});

Я получаю следующие сообщения об ошибках в моей консоли, если пользователь вводит неправильные данные в регистрационную форму: -

Error: users validation failed: fname: enter a first name, lname: enter a last name , pass: please enter a passkey, email: Error, expected `email` to be unique. Value: `ar@gmail.com`
    at ValidationError.inspect (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\error\validation.js:47:26)
    at formatValue (internal/util/inspect.js:718:31)
    at inspect (internal/util/inspect.js:287:10)
    at formatWithOptions (internal/util/inspect.js:1910:40)
    at Object.Console.<computed> (internal/console/constructor.js:299:10)
    at Object.log (internal/console/constructor.js:309:61)
    at D:\.UC\eb Development\react-practice\authentication\index.js:75:21
    at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\model.js:4824:16
    at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
    at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\model.js:4847:21
    at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\model.js:494:16
    at D:\.UC\eb Development\react-practice\authentication\node_modules\kareem\index.js:246:48
    at next (D:\.UC\eb Development\react-practice\authentication\node_modules\kareem\index.js:167:27)
    at next (D:\.UC\eb Development\react-practice\authentication\node_modules\kareem\index.js:169:9)
    at Kareem.execPost (D:\.UC\eb Development\react-practice\authentication\node_modules\kareem\index.js:217:3)
    at _handleWrapError (D:\.UC\eb Development\react-practice\authentication\node_modules\kareem\index.js:245:21) {
  errors: {
    fname: ValidatorError: enter a first name
        at validate (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1217:13)
        at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1200:7
        at Array.forEach (<anonymous>)
        at SchemaString.SchemaType.doValidate (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1145:14)
        at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\document.js:2392:18
        at processTicksAndRejections (internal/process/task_queues.js:79:11) {
      properties: [Object],
      kind: 'required',
      path: 'fname',
      value: '',
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    lname: ValidatorError: enter a last name
        at validate (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1217:13)
        at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1200:7
        at Array.forEach (<anonymous>)
        at SchemaString.SchemaType.doValidate (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1145:14)
        at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\document.js:2392:18
        at processTicksAndRejections (internal/process/task_queues.js:79:11) {
      properties: [Object],
      kind: 'required',
      path: 'lname',
      value: '',
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    pass: ValidatorError: please enter a passkey
        at validate (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1217:13)
        at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1200:7
        at Array.forEach (<anonymous>)
        at SchemaString.SchemaType.doValidate (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1145:14)
        at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\document.js:2392:18
        at processTicksAndRejections (internal/process/task_queues.js:79:11) {
      properties: [Object],
      kind: 'required',
      path: 'pass',
      value: '',
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    email: ValidatorError: Error, expected `email` to be unique. Value: `ar@gmail.com`
        at validate (D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1217:13)
        at D:\.UC\eb Development\react-practice\authentication\node_modules\mongoose\lib\schematype.js:1192:24
        at processTicksAndRejections (internal/process/task_queues.js:97:5) {
      properties: [Object],
      kind: 'unique',
      path: 'email',
      value: 'ar@gmail.com',
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    }
  },
  _message: 'users validation failed'
}

Я хочу быть возможность уведомить пользователей на странице регистрации, что они делают неправильно, я получаю сообщения об ошибках и передаю объект ошибки на страницу регистрации для повторного рендеринга, на этот раз отображая ошибки

объект ошибки содержащие следующую информацию, когда я передаю ее в регистр. e js

ValidationError: fname: enter a first name, lname: enter a last name , pass: please enter a passkey, email: Error, expected `email` to be unique. Value: `ar@gmail.com`

Я хочу отображать только сообщения об ошибках на странице регистрации, как мне это сделать на основе приведенной выше информации? или есть ли другой способ отображать ошибки в веб-интерфейсе?

1 Ответ

0 голосов
/ 05 августа 2020

Один из способов сделать это - через npm express-validator, вы можете прочитать об этом здесь

Затем включите его в свой файл маршрутизатора, а затем подтвердите через промежуточное ПО маршрутизатора, например:

const { check, validationResult } = require('express-validator');

router.post(
  '/',
  [
    //account details validation
    check('fname', 'Enter a First Name')
      .not()
      .isEmpty(),
    check('lname', 'Enter a Last name')
      .not()
      .isEmpty()
  check('email', 'type is required')
      .not()
      .isEmpty(),
  ],
  async (req, res) => {
    try {
     const errors = validationResult(req);
   //Check if there are errors 
    if (!errors.isEmpty()) {
    //If so Send response status with the error message
      return res
        .status(500)
        .json({ status: false, data: errors.array()[0].msg });
    }
//... Rest of code is here ... 
    } catch (error) {
      res.status(500).json({ status: false, error: error.message });
    }
  }
);

Я рекомендую вам прочитать о express маршрутизации и передаче статуса ответа на ваш интерфейс

Должен сказать, что ответ зависит от вашей реализации, вы также можете использовать

res.send(errors.array()[0].msg)

просто отправить само сообщение. В приведенном выше коде я использовал json obj и статус ответа, чтобы различать guish между типами ошибок. Все зависит от вашего решения, надеюсь, это имеет смысл. Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...