Aws лямбда поддерживает связующее ПО mongoose? - PullRequest
0 голосов
/ 07 октября 2019

Поддерживает ли AWS lambda промежуточное ПО mongoose, я использую .pre() для проверки существования данных при сохранении.

вот мой вызов функции для сохранения

res = new cModel();     
res.pre('save', function (next) {
                                    cModel.find({name: company.name}, function (err, docs) {
                                        if (!docs.length){
                                            next();
                                        }else{                
                                            console.log('company name exists: ',company.name);
                                            next(new Error("Company Name exists!"));
                                        }
                                    });
                                }) ;

это моя функцияпозвоните, чтобы обновить

company_model.companySchema.pre('update', function (next) {
                                try {
                                    cModel.find({ name: { $regex: new RegExp(`^${this.getFilter().name}$` , 'i') }}, function (err, docs) {
                                        try {
                                            if (!docs.length) {
                                                next();
                                            } else {
                                                console.log('company name exists: ', this.getFilter().name);
                                                next(new Error("Company Name exists!"));
                                            }
                                        } catch (e) {
                                            console.error('error in cModel.find: ' + e.message);
                                        }
                                    });
                                } catch (e) {
                                    console.error('error in pre save : ' + e.message)
                                }
                            });

1 Ответ

1 голос
/ 07 октября 2019

eВнутри pre('save',..., ссылка на текущий документ находится в this. Здесь я заменил company на this в вашем примере.

const schema = new mongoose.Schema({})
schema.pre('save', function (next) {
  cModel.find({name: this.name}, function (err, docs) {
    if (!docs.length){
      next();
    } else {                                 
      console.log('company name exists: ', this.name);
      next(new Error("Company Name exists!"));
    }
  });
});
const cModel = mongoose.model("cmodel", schema)

Эта ошибка не имеет никакого отношения к лямбде, за исключением того, что среда выполнения в лямбде, похоже, поглощает ошибку в асинхронном методе. Чтобы увидеть, как выдается ошибка, вы можете обернуть содержимое вашего обратного вызова в блок try {...} catch (e) {...} и зарегистрировать ошибку в блоке перехвата:

const schema = new mongoose.Schema({})    
schema.pre('save', function (next) {
  try {
    cModel.find({name: this.name}, function (err, docs) {
      try {
        if (!docs.length){
          next();
        } else {                                 
          console.log('company name exists: ', this.name);
          next(new Error("Company Name exists!"));
        }
      } catch (e) {
        console.error('error in cModel.find: ' + e.message)
      }
    });
  } catch (e) {
    console.error('error in pre save : ' + e.message)
  }
});
const cModel = mongoose.model("cmodel", schema)

Обновление

Использование.pre('update'... будет иметь this ссылку на запрос, а не на документ, так как документ никогда не загружается. Вы можете получить доступ к частям запроса, используя getFilter() и getUpdate().

Ниже приведен пример проверки существования компании перед обновлением:

const schema = new mongoose.Schema({})
schema.pre('update', function (next) {
  let newName = this.getUpdate().name;
  cModel.find({name: newName }, function (err, docs) {
    if (!docs.length){
      next();
    } else {                                 
      console.log('company name exists: ', newName);
      next(new Error("Company Name exists!"));
    }
  });
});
const cModel = mongoose.model("cmodel", schema)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...