2017-10-22 5 views
0

SequelizeExpressに統合する方法に関する私の学校のワークショップに従っています。私たちは私たちの中で、レバレッジhooksに学習しているモデル、およびそれに私はこれで混乱していた部分があります:Sequelize(リターンとアタッチ)のフックを理解する

が保存されているページのインスタンスと

フックの実行を取り付け対返す

議論として与えられる。したがって、作成した urlTitleを 関数から返すのではなく、このページインスタンスに添付したいと考えています。

var Sequelize = require('sequelize'); 
var db = new Sequelize('postgres://localhost:5432/__wikistack__', { 
    logging: false, 
}); 

const Page = db.define(
    'page', 
    { 
    title: { 
     type: Sequelize.STRING, 
    }, 
    urlTitle: { 
     type: Sequelize.STRING, 
    }, 
    content: { 
     type: Sequelize.TEXT, 
    }, 
    status: { 
     type: Sequelize.ENUM('open', 'closed'), 
    }, 
    }, 
    { 
    hooks: { 
     beforeValidate: function(page) { 
     if (page.title) { 
      // Removes all non-alphanumeric characters from title 
      // And make whitespace underscore 
      return (page.urlTitle = page.title.replace(/\s/g, '_').replace(/\W/g, '')); 
     } else { 
      // Generates random 5 letter string 
      return (urlTitle = Math.random() 
      .toString(36) 
      .substring(2, 7)); 
     } 
     }, 
    }, 
    } 
); 

誰かがこれを説明することはできますか?どのようにフックの機能は何かを返すことはできませんか?上記のように動作するので、フック/関数は何かを返す。

ありがとうございます!

答えて

1

フックは、レコードインスタンスの特定のライフサイクルポイントで実行される単なるコードです。純粋に副作用にすることができます。あなたの場合、フックが渡されたページオブジェクトを変更するだけで、戻り値は助けにも傷つきもしません。

ただし、フックの戻り値は無駄ではありません。フックの中で何か非同期化が必要な場合は、約束を返さなければなりません。