2017-09-28 3 views
0

Comment supprimer certains champs de modèle de find* (comme mot de passe, jeton)?
Je pense que PRÉPONDÉRANTS fonction toJSON() (comme ici https://stackoverflow.com/a/27979695/6119618) n'est pas une bonne façon, parce que je dois parfois ce domaine pour la validation de mot de passe ou un jeton pour le contrôle etc ..
Y at-il quelque chose comme aussi .select('+token') que mangouste a?Sequelize. Bon moyen de remplir les données et supprimer les clés de la sortie?

Et une autre question, je pense que cela correspond à ce sujet. Comment supprimer généré par champs through de find* sortie? Quand je l'appelle User.find() il répond { id: 0, name: 'somename', UserProjectsTie: { /* complex object of many-to-many relation table */ } }

Répondre

0

Pour exclure un attribut de découverte *:

Model.findAll({ 
    attributes: { exclude: ['baz'] } 
}); 

Pour rendre ce comportement par défaut, utilisez un scope:

const Model = sequelize.define('Model', { 
    // Attributes 
}, { 
    defaultScope: { 
    attributes: { exclude: ['baz'] } 
    } 
}); 

À moins que je me trompe le 'through' ne devrait apparaître que si vous utilisez 'include'. Pour se débarrasser de dans dans ce cas:

Model.findAll({ 
    include: [{association: 'OtherModels', through: {attributes: []}}] 
}); 
+0

Je dois le faire dans chaque requête. Je souhaite inverser ce comportement pour inclure des champs uniquement lorsque j'en ai besoin – Herrgott

+0

Lorsque vous définissez votre objet, vous pouvez utiliser une étendue pour définir la valeur par défaut afin de ne pas fournir de champ. http://docs.sequelizejs.com/manual/tutorial/scopes.html (mise à jour de la réponse pour refléter cela) – hayhorse