Derniers

Sailsjs : anatomie d'un projet

Sailsjs est un framework basé sur nodejs suivant le model MVC et qui vous permet de créer facilement votre site web mais surtout votre backend. Lisez mon blog Qu'est ce que Sailsjs si vous ne connaissez pas ce framework. Dans ce blog, je vais vous présenter l'anatomie d'un projet sailsjs.

Création d'un projet sailsjs

Pour créer un projet sailsjs, vous devez installer nodejs et sailsjs. Si ce n'est pas encore fait, je vous invite à le faire avant de continuer.
Créez votre projet sailsjs avec la commande suivante

sails new myprojet

Cette commande vous demandera de choisir le type de projet que vous voulez créer

 Choose a template for your new Sails app:
 1. Web App  ·  Extensible project with auth, login, & password recovery
 2. Empty    ·  An empty Sails app, yours to configure
 (type "?" for help, or <CTRL+C> to cancel)
? 

Choisissez 2

info: Installing dependencies...
Press CTRL+C to cancel.
(to skip this step in the future, use --fast)
 info: Created a new Sails app `myprojet`!

Après quelques minutes, votre projet sailsjs sera créé.

Anatomie d'un projet sailsjs

Nous allons maintenant regarder la structure des fichiers d'un projet sailsjs. Pour explorer les fichiers de notre projet, nous avons besoin d'un éditeur. J'utilise visual code. Vous pouvez le télécharger gratuitement sur le site officiel.
visual-code-editeur-de-code
Ouvrez votre repertoire myprojet avec l'éditeur visual code
anatomie-projet-sailsjs
Un projet sailsjs contient 6 répertoires et des fichiers. Les 6 répertoires sont :

  • api
  • assets
  • config
  • node_modules
  • task
  • views

Les répertoires d'un projet sailsjs

Répertoire api

Ce répertoire constitue l'intelligence de votre application. Il contient l'ensemble de votre logique. Dans le model MVC sur lequel est basé sailsjs, le répertoire api contient le M (Model) et le C (Controller). Le répertoire api contient 4 autres répertoires: controller, helpers, models et policies.

Répertoire controller

Le répertoire controller est l'endroit où vous allez coder votre logique. C'est la logique de votre application. C'est dans ce répertoire que vous allez générer les actions à exécuter. Pour générer une action, executez la commande suivante

sails generate action myaction

module.exports = {


  friendlyName: 'Myaction',


  description: 'Myaction something.',


  inputs: {

  },


  exits: {

  },


  fn: async function (inputs, exits) {

    return exits.success();

  }


};

Répertoire helpers

Le répertoire helpers contient l'ensemble des tâches répétitives comme les services. C'est dans ce répertoire que vous aller générer les services qui seront utilisés par les controllers. Vous pouvez créer par exemple un service qui envoi des emails avec mailgun. (voir mon blog sailsjs & mailgun).
Pour générer un helper , executez la commande suivante

sails generate helper myhelper
module.exports = {


  friendlyName: 'Myhelper',


  description: 'Myhelper something.',


  inputs: {

  },


  exits: {

  },


  fn: async function (inputs, exits) {

    // All done.
    return exits.success();

  }


};

Répertoire models

Le répertoire models contient l'ensemble des entités (exemple client) de votre projet. C'est dans ce répertoire que vous allez générer la structure des entités de votre projet. Pour générer un model, executez la commande suivante

sails generate model mymodel
/**
 * Mymodel.js
 *
 * @description :: A model definition.  Represents a database table/collection/etc.
 * @docs        :: https://sailsjs.com/docs/concepts/models-and-orm/models
 */

module.exports = {

  attributes: {

    //  ╔═╗╦═╗╦╔╦╗╦╔╦╗╦╦  ╦╔═╗╔═╗
    //  ╠═╝╠╦╝║║║║║ ║ ║╚╗╔╝║╣ ╚═╗
    //  ╩  ╩╚═╩╩ ╩╩ ╩ ╩ ╚╝ ╚═╝╚═╝


    //  ╔═╗╔╦╗╔╗ ╔═╗╔╦╗╔═╗
    //  ║╣ ║║║╠╩╗║╣  ║║╚═╗
    //  ╚═╝╩ ╩╚═╝╚═╝═╩╝╚═╝


    //  ╔═╗╔═╗╔═╗╔═╗╔═╗╦╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
    //  ╠═╣╚═╗╚═╗║ ║║  ║╠═╣ ║ ║║ ║║║║╚═╗
    //  ╩ ╩╚═╝╚═╝╚═╝╚═╝╩╩ ╩ ╩ ╩╚═╝╝╚╝╚═╝

  },

};

Répertoire policies

Le répertoire policies contient l'ensemble des règles d'autorisation à vos actions. C'est dans ce répertoire que vous allez definir qui a droit à quoi.
un exemple de policy est de rejeter tous les appels non authentifiés.

/**
 * authenticated
 * @description :: Policy that rejects unauthorized requests.
 */

module.exports = (req, res, next) => {
  if (!req.user) return res.forbidden();
  return next();
};

Répertoire assets

Le répertoire assets contient l'ensemble de vos données statiques comme les images, les fichiers css, les fichiers js, les templates, le favicon.ico et le fichier robots.txt

Répertoire config

Le répertoire config contient l'ensemble des fichiers de configuration de votre application sailsjs. Ce répertoire contient 2 autres répertoires env et locales. Le répertoire env contient le fichier production.js dans le lequel vous definirez les paramètres d'exécution de votre application en mode production. Le répertoire locales contient les fichiers de langue pour créer une application multilangue avec sailsjs.

Répertoire node_modules

Le répertoire node_modules contient l'ensemble des modules necessaires à l'exécution de votre application. Ce répertoire est générer automatiquement par npm quand vous executez la commande npm install.

Répertoire tasks

Ce répertoire est utilisé par grunt pour automatiser certaines tâches. Nous en parlerons plus en détail dans un autre blog.

Répertoire views

Ce répertoire contient l'ensemble de vos vues. C'est le V dans le model MVC. Le répertoire views contient toutes les pages visibles par l'utilisateur.

En plus des répertoires ci-dessus cités, une applications sailsjs contient aussi des fichiers comme:

  • .sailsrc qui est un fichier de configuration pour l'application
  • app.js qui est le fichier de démarrage de votre application
  • Gruntfile.js qui est un fichier de configuration pour grunt
  • package.json qui est fichier listant l'ensemble des dépendances de votre projet
Author image
Ingénieur en Système de communication EPFL Switzerland. Co-gérant de la société BEF Technology SARL créée en 2009.
Chemaudin et Vaux France Website