MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Xử lý lỗi xác thực Mongoose - ở đâu và như thế nào?

Tại thời điểm này, có vẻ hợp lý khi xem xét cách mongoose xử lý lỗi.

Bạn sẽ không muốn các mô hình của mình xử lý các thông báo lỗi. Lớp trình bày (bộ điều khiển?) Nên dựa vào loại type để quyết định xem đâu là thông báo thân thiện với người dùng nhất để hiển thị (i18n đã xem xét).

Cũng có trường hợp xác thực có thể xảy ra bằng cách sử dụng phần mềm trung gian. Trong trường hợp này, thông báo lỗi sẽ hiển thị trên bộ điều khiển của bạn là bất kỳ thứ gì bạn chuyển đến next() gọi lại.

Vì vậy, đối với trường hợp phần mềm trung gian, mặc dù không được ghi lại, nhưng để giữ một API xác thực nhất quán trên các mô hình của bạn, bạn nên sử dụng trực tiếp các trình tạo Lỗi của Mongoose:

var mongoose = require('mongoose');
var ValidationError = mongoose.Error.ValidationError;
var ValidatorError  = mongoose.Error.ValidatorError;

schema.pre('save', function (next) {
  if (/someregex/i.test(this.email)) {
    var error = new ValidationError(this);
    error.errors.email = new ValidatorError('email', 'Email is not valid', 'notvalid', this.email);
    return next(error);
  }

  next();
});

Bằng cách đó, bạn được đảm bảo xử lý lỗi xác thực nhất quán ngay cả khi lỗi xác thực bắt nguồn từ phần mềm trung gian.

Để đối sánh chính xác các thông báo lỗi với các loại, tôi sẽ tạo một enum sẽ hoạt động như một bản đồ tĩnh cho tất cả các loại có thể có:

// my controller.js

var ValidationErrors = {
  REQUIRED: 'required',
  NOTVALID: 'notvalid',
  /* ... */
};


app.post('/register', function(req, res){
  var user = new userModel.Model(req.body);

  user.save(function(err){
    if (err) {
      var errMessage = '';

      // go through all the errors...
      for (var errName in err.errors) {
        switch(err.errors[errName].type) {
          case ValidationErrors.REQUIRED:
            errMessage = i18n('Field is required');
            break;
          case ValidationErrors.NOTVALID:
            errMessage = i18n('Field is not valid');
            break;
        }
      }
      res.send(errMessage);

    }
  });
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sao lưu và khôi phục MongoDB bằng MongoDump

  2. Trả về kết quả mongoose trong truy vấn tìm đến một biến

  3. Cách sử dụng URL mới từ mongodb 3.6 để kết nối từ golang

  4. Cách phù hợp để thực hiện truy vấn MongoDB đồng bộ trong Node.js là gì?

  5. Thiết lập môi trường MongoDB | Cài đặt MongoDB trên Windows