2016-07-13 2 views
0

Я новичок с петлей и есть что-то, чего я действительно не понимаю с помощью крючков.как заблокировать добавление модели с помощью крючков?

У меня есть модель «вопрос» с этими свойствами: - ID - .. - .. - идентификатор пользователя

и то, что я хочу сделать, это проверить, если идентификатор пользователя уже существует в таблице пользователей, когда запрос POST призван добавьте вопрос. (и поднимите ошибку, но это уже работает)

Итак, я создал резервный ключ, который хорошо работает (ошибка поднята и т. д.), но я не могу заблокировать добавление модели, даже если я позвоню " next (err) "на моем крючке.

Question.observe('before save', function isInDb(ctx, next){  
    var PoemUser = app.models.PoemUser; 
    var PoemUserId = ctx.instance.id_author; 

    PoemUser.findOne({ where: {id: PoemUserId} } ,function(err,exists){ 
      console.log('exist : ' +exists); 
      if (exists == null){ 
       var err = new Error(); 
       err.name = "id not existing" 
       err.status = 404; // don't know wich code use 
       err.message = "This user is not existing"; 
       next(err); 
      }; 
     }); 

    }); 
}; 

Я искал документацию, но, по-моему, я не очень хорошо это сделал.

Это будет действительно здорово, если кто-то сможет объяснить мне хороший способ сделать то, что я хочу сделать.

Спасибо заранее!

ответ

0

Использование крюка для предотвращения добавления модели - неплохой путь. У меня создалось впечатление, что вы пытаетесь предотвратить добавление вопроса, когда пользователь существует.

Не могли бы вы проверить следующий код?

PoemUser.findOne({ where: {id: PoemUserId} }, function(err,exists){ 
     if(err) { 
      next(error); 
     } 
     console.log('exist : ' +exists); 
     if (!exists){ 
      var err = new Error(); 
      err.status = 404; // don't know which code use 
      err.message = "User not found"; 
      next(err); 
     } else { 
      next(); 
     } 
    }); 
}); 

Дважды проверьте имя свойства, как вы упомянули, что вопрос модель содержит userId поля, но вы пытаетесь сохранить свойство id_author как в ctx.instance.id_author;

Просто для информации:

  • ctx.instance будет доступен только при сохранении нового вопроса, а не когда вы обновляете вопрос.
  • при обновлении вопроса вы получите экземпляр в ctx.data.
+0

спасибо, Я добился, чтобы это сработало, спасибо за информацию, я этого не знал! должен ли я проверить, является ли это обновлением или дополнением для работы с ctx.instance или ctx.data? Или есть способ заставить его работать в обоих случаях? –

+0

Вы можете сделать так: var instance = (ctx.instance)? ctx.instance: ctx.data; 'и экземпляр будет содержать значение в обоих случаях создания/обновления. –

Смежные вопросы