Mongoose: Não é uma função ERRO - this.isModified não é uma função

Criado em 18 set. 2016  ·  11Comentários  ·  Fonte: Automattic/mongoose

Quando eu uso o seguinte código:

userSchema.pre('save', (done) => {
  if(this.isModified('password')) {
    bcrypt.hash(this.password, null, null, (err, hash) => {
      if(err) return next(err);

      this.password = hash;
      this.updated_at = new Date().toISOString();
      done();
    });
  } else {
    return done();
  }
});

Eu recebo o seguinte erro:

TypeError: this.isModified is not a function
    at model.userSchema.pre (C:\code\project\core\models\user.js:26:11)
    at _next (C:\code\project\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (C:\code\project\node_modules\hooks-fixed\hooks.js:186:8)
    at model.Object.defineProperty.value.fn (C:\code\project\node_modules\mongoose\lib\schema.js:221:11)
    at _next (C:\code\project\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (C:\code\project\node_modules\hooks-fixed\hooks.js:186:8)
    at C:\code\project\node_modules\mongoose\lib\schema.js:196:17
    at C:\code\project\node_modules\kareem\index.js:127:16
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Problema:

  • this não é um Documento, Consulta ou Esquema. Seu valor é {}

Como posso resolver isso?

Comentários muito úteis

Você está usando um operador de seta para o retorno de chamada, que altera o escopo de this . Se você definir um retorno de chamada regular, deve ficar bem, por exemplo:

userSchema.pre('save',  function(done)  {
});

Todos 11 comentários

Você está usando um operador de seta para o retorno de chamada, que altera o escopo de this . Se você definir um retorno de chamada regular, deve ficar bem, por exemplo:

userSchema.pre('save',  function(done)  {
});

OK. Obrigado. Funciona.

Corrija seu eslintrc

Em terça-feira, 29 de novembro de 2016 às 5h16, Nick Rameau [email protected]
escreveu:

Existe uma maneira de fazer isso com funções de seta? Estou usando ES6 e meu
eslintrc está reclamando de retornos de chamada regulares.


Você está recebendo isso porque está inscrito neste tópico.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/Automattic/mongoose/issues/4537#issuecomment-263567210 ,
ou silenciar o thread
https://github.com/notifications/unsubscribe-auth/ABi5KbZG27HnF2sX2RwDIhTp4Rz1lIG_ks5rDCW1gaJpZM4J_8-c
.

Eu também tive esse problema. Obrigado pela ajuda @VictorGerritsenQLVR!

Existe uma maneira de alterar o código para acomodar o operador de seta, em vez de usar function(next) ?

@domarp-j Boa pergunta. Eu pensei sobre isso e tentei descobrir, mas não consegui pensar em nada mais fácil do que simplesmente mudar para uma função de retorno de chamada normal. Talvez outra pessoa tenha feito isso. Vou ficar de olho nesta questão.

Não há como fazer isso, setas gordas usam escopo lexical para contexto, não há maneira de contornar isso.

tive o mesmo problema, obrigado pela ajuda

Oi, estava preso no mesmo problema com a função de seta es6. Muito obrigado!

ótimo obrigado

Obrigado , funciona para mim também.

Esta página foi útil?
0 / 5 - 0 avaliações