簡體   English   中英

我在驗證 mongodb 中的字段時出錯,nodejs

[英]I got error while validating field in mongodb, nodejs

這些是我在 model 中驗證時從后端得到的錯誤,並在“err”變量中收到。 如果我使用 console.log(err),那么它會顯示以下錯誤。

Error [ValidationError]: employees validation failed: fullName: This field is required from model, email: This field is required from model
    at ValidationError.inspect (D:\Programming\MERN\CRUD\node_modules\mongoose\lib\error\validation.js:61:24)
    at formatValue (internal/util/inspect.js:703:31)
    at inspect (internal/util/inspect.js:272:10)
    at formatWithOptions (internal/util/inspect.js:1887:40)
    at Object.Console.<computed> (internal/console/constructor.js:284:10)
    at Object.log (internal/console/constructor.js:294:61)
    at handleValidationError (D:\Programming\MERN\CRUD\routes\/employeeRoute.js:46:13)
    at D:\Programming\MERN\CRUD\routes\/employeeRoute.js:33:17
    at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\model.js:4915:16
    at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\helpers\promiseOrCallback.js:16:11
    at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\model.js:4938:21
    at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\model.js:492:16
    at D:\Programming\MERN\CRUD\node_modules\kareem\index.js:246:48
    at next (D:\Programming\MERN\CRUD\node_modules\kareem\index.js:167:27)
    at next (D:\Programming\MERN\CRUD\node_modules\kareem\index.js:169:9)
    at Kareem.execPost (D:\Programming\MERN\CRUD\node_modules\kareem\index.js:217:3) {
  errors: {
    fullName: MongooseError [ValidatorError]: This field is required from model
        at new ValidatorError (D:\Programming\MERN\CRUD\node_modules\mongoose\lib\error\validator.js:29:11)
        at validate (D:\Programming\MERN\CRUD\node_modules\mongoose\lib\schematype.js:1178:13)
        at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\schematype.js:1161:7
        at Array.forEach (<anonymous>)
        at SchemaString.SchemaType.doValidate (D:\Programming\MERN\CRUD\node_modules\mongoose\lib\schematype.js:1106:14)
        at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\document.js:2378:18
        at processTicksAndRejections (internal/process/task_queues.js:79:11) {
      properties: [Object],
      kind: 'required',
      path: 'fullName',
      value: '',
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    },
    email: MongooseError [ValidatorError]: This field is required from model
        at new ValidatorError (D:\Programming\MERN\CRUD\node_modules\mongoose\lib\error\validator.js:29:11)
        at validate (D:\Programming\MERN\CRUD\node_modules\mongoose\lib\schematype.js:1178:13)
        at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\schematype.js:1161:7
        at Array.forEach (<anonymous>)
        at SchemaString.SchemaType.doValidate (D:\Programming\MERN\CRUD\node_modules\mongoose\lib\schematype.js:1106:14)
        at D:\Programming\MERN\CRUD\node_modules\mongoose\lib\document.js:2378:18
        at processTicksAndRejections (internal/process/task_queues.js:79:11) {
      properties: [Object],
      kind: 'required',
      path: 'email',
      value: '',
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true
    }
  },
  _message: 'employees validation failed'
}

現在,如果我 console.log('err.errors.fullName.message')。 它工作得很好。 但是如果key比較多,顯然我們需要使用循環。 因此,如果我嘗試按以下方式遍歷 object 的鍵,則會拋出以下錯誤。

for(field in err.errors){
.......
.......
}

錯誤是:

ReferenceError: field is not defined

這里有什么問題?

首先,您的后端不應像上面提到的那樣提供此類錯誤響應。 這必須類似於 JSON 錯誤響應。 例如

{ success: false, errors: [{fullName: "fullName is required"}] }

來回答你的問題。 如果你想正確顯示錯誤,你可以遍歷錯誤,你可以通過err.errors圖片

eg err.errors.forEach(error => console.log(error) )

但這又是一種非常錯誤的拋出驗證錯誤的方法。 要驗證任何數據,您可以使用 joi、request-validator、validatorjs 等。哪個會根據需要為您提供完美的錯誤響應? 為什么我要強調這一點,因為你公開了整個目錄、文件、model 名稱等。我希望這可以幫助你解決問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM