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?
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.
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: