Sailsjs propose des actions de plans par défaut, telles que la recherche, la mise à jour, la création, etc.
J'ai besoin de remplacer certaines d'entre elles pour convenir à des fins commerciales particulières. Cependant, je voudrais y ajouter, au lieu de les simplifier simplement. Comment appeler les actions de planplint par défaut dans l'action primordiale. P>
Par exemple, la mise à jour peut mettre à jour l'enregistrement d'un modèle. P>
update
3 Réponses :
Vous devriez regarder Callbacks de cycle de vie à Sailsjs. Donc, par exemple, vous pouvez utiliser avant-déjeuner code> ou
Beforecree code> Callback de cycle de vie pour faire plus dans le modèle:
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
username: {
type: 'string',
required: true
},
password: {
type: 'string',
minLength: 6,
required: true,
columnName: 'encrypted_password'
}
},
// Lifecycle Callbacks
beforeCreate: function (values, cb) {
// Encrypt password
bcrypt.hash(values.password, 10, function(err, hash) {
if(err) return cb(err);
values.password = hash;
//calling cb() with an argument returns an error. Useful for canceling the entire operation if some criteria fails.
cb();
});
}
};
J'ai essayé avant-déjeuner de la vie du cycle de vie. Mais quand je posterai à un modèle, par exemple Post / ABC où ABC est le modèle, Brevenumdate est également déclencheur. Pourquoi donc?
Je pense que ça ne devrait pas. Avez-vous également un Beforecree code> rappel? Vous pouvez peut-être éditer et sauver un modèle là-bas sans utiliser le rappel fourni qui déclenche
avant-déjeuner code>?
Tout copier à partir de à p> Assurez-vous que la recherche est en minuscule. Vous devrez modifier chacun pour faire référence à l'emplacement de actionutil.js code>. Vous pouvez maintenant les modifier sur votre contenu de votre cœur sans réinventer la roue. p> p>
Comment faire de ces actions primordiales différentes pour différents modèles?
Ça dépend. Si vous avez de vastes différences entre les modèles, vous ne voulez probablement pas utiliser des plans du tout. Dans votre contrôleur, vous pouvez simplement ajouter une seule méthode pour écraser une seule action et laisser le reste intact. Donc, pour le modèle utilisateur, je pourrais créer une méthode de "mise à jour" sur ce contrôleur et écrasera simplement ce plan et laisser le reste intact. Toutefois, si vos différences sont petites, vous pouvez identifier vos modèles à l'intérieur des fichiers de planimint et effectuer des ajustements si nécessaire.
J'ai essayé votre solution mais je ne pouvais pas le faire fonctionner. Pendant la procédure de levage, j'ai eu l'erreur un crochet ('userconfig') n'a pas réussi à charger! Code>.
gist.github.com/mphasize/e9ed62f9d139D2152445 La stratégie avantblueprint peut avoir un sens
Je viens de tomber sur le même problème et j'ai trouvé une autre façon de le réparer. Cela peut aider à l'avenir si quelqu'un a le même problème. Ce que j'ai enfin fait était de ré-écrire l'action dans le contrôleur, dans mon cas, c'était Ajouter CODE>, puis, après avoir fait des trucs à l'intérieur, appelé l'action de Blueprint par défaut.
Donc, mon code ressemble ci-dessous:
add: function (req, res) {
if (xxx) {
// I need to do something only when the condition above is met
Section.count({xxx: xxx)}).exec(function (error, count) {
if (error) {
return res.json(500, {error: 'There was an error while trying to run query'});
}
//I do what I have to do
return sails.hooks.blueprints.middleware.add(req, res);
});
} else {
//I just return the default blueprint's action
return sails.hooks.blueprints.middleware.add(req, res);
}
}
Cela a répondu à la question pour moi. Merci
pouces pour cela vous êtes un champion :)
Prendre en compte toutes les fonctions de Sails.hooks.blueprints.middleware CODE> ont des noms minuscules (par exemple,
FindOne code>)
Supposé que dans mon contrôleur j'appelle saishants.hooks.blueprints.middleware.findone (req, res); code> Comment puis-je obtenir l'objet de modèle avant B> est renvoyé au client ?
Sails.hooks.blueprints.Middleware CODE> Ne semble avoir aucun de ceux-ci (trouver, trouver, figure, etc.). Une idée où ils ont été déplacés? La solution de contournement est à
requiert ({$ {Sails.config.appPath} / node_modules / Sails / Lib / Hook S / Blueprints / $ {Actio N}} `) Code>, mais pas idéal du tout. ..