Fermer

mai 30, 2018

Une introduction à Sails.js –


Sails.js est un framework Node.js MVC (model-view-controller) qui suit le principe de "convention over configuration". Il s'inspire du célèbre framework Web Ruby on Rails et vous permet de créer rapidement des API REST, des applications à une seule page et des applications en temps réel (basées sur WebSockets). Il fait un usage intensif des générateurs de code qui vous permettent de construire votre application avec moins d'écriture de code – en particulier de code commun qui peut être autrement échafaudé.

Le framework est construit sur Express.js, l'un des nœuds les plus populaires bibliothèques .js, et Socket.io, une bibliothèque / moteur JavaScript pour l'ajout de communications événementielles bidirectionnelles en temps réel aux applications. A l'heure où nous écrivons, la version stable officielle de Sails.js est 0.12.14 disponible à partir de npm . Sails.js version 1.0 n'a pas été officiellement publié, mais selon Sails.js creators version 1.0 est déjà utilisé dans certaines applications de production, et ils recommandent même de l'utiliser lors du démarrage de nouveaux

Caractéristiques principales

Sails.js a beaucoup de grandes caractéristiques:

  • il est construit sur Express.js
  • il a un support en temps réel avec WebSockets
  • il prend une approche "convention sur configuration"
  • il a une puissante génération de code, grâce à Blueprints
  • il est agnostique de base de données grâce à sa puissante Waterline ORM / ODM
  • il supporte plusieurs data stores dans le même projet
  • il dispose d'une bonne documentation. sont actuellement quelques inconvénients importants, tels que:

    • pas de support pour la requête JOIN dans Waterline
    • pas de support pour les transactions SQL jusqu'à Sails v1.0 (en beta au moment de l'écriture)
    • jusqu'à la version 1.0, utilise toujours Express.js v3, qui est EOL (fin de vie)
    • de velopment est très lent.

    Sails.js vs Express.js

    Le développement de logiciels est une question de construction d'abstractions. Sails.js est une couche d'abstraction de haut niveau au-dessus de Express.js (qui est elle-même une abstraction sur les modules HTTP de Node) qui fournit le routage, le middleware, la diffusion de fichiers, etc. Il ajoute également un puissant ORM / ODM, le modèle architectural MVC et une puissante interface CLI (entre autres fonctionnalités).

    Vous pouvez créer des applications Web en utilisant le service HTTP de bas niveau de Node et d'autres modules utilitaires (tels que le système de fichiers ) mais ce n'est pas recommandé, sauf pour l'apprentissage de la plate-forme Node.js. Vous pouvez également faire un pas en avant et utiliser Express.js, qui est un framework léger et populaire pour créer des applications web.

    Vous aurez le routage et d'autres constructions utiles pour les applications web, mais vous devrez prendre soin de à peu près tout de la configuration, la structure de fichier et l'organisation de code à travailler avec des bases de données.

    Express n'offre aucun outil intégré pour vous aider avec l'accès à la base de données, donc vous aurez besoin de réunir les technologies nécessaires pour construire un application web complète. C'est ce qu'on appelle une pile. Les développeurs Web, utilisant JavaScript, utilisent principalement la populaire pile MEAN qui représente MongoDB, ExpressJS, AngularJS et Node.js.

    MongoDB est le système de base de données préféré des développeurs Node / Express, mais vous pouvez utiliser n'importe quelle base de données que vous voulez. Le point le plus important ici est qu'Express ne fournit aucune API intégrée quand il s'agit de bases de données.

    The Waterline ORM / ODM

    Une caractéristique clé de Sails.js est Waterline, un puissant ORM (objet relationnel). mapper) pour les bases de données SQL et ODM (mappeur de document objet) pour les bases de données basées sur des documents NoSQL. Waterline résout toutes les complexités lorsque vous travaillez avec des bases de données et, plus important encore, avec Waterline, vous n'avez pas à prendre la décision de choisir un système de base de données lorsque vous commencez tout juste le développement. Il ne vous intimide pas non plus lorsque votre client n'a pas encore décidé de la technologie de base de données à utiliser.

    Vous pouvez commencer à créer votre application sans une seule ligne de configuration. En fait, vous n'avez pas du tout à installer un système de base de données. Grâce à la base de données intégrée sails-disk basée sur NeDB, vous pouvez utiliser le système de fichiers de manière transparente pour stocker et récupérer des données afin de tester la fonctionnalité de votre application.

    Une fois que vous êtes prêt décidé sur le système de base de données pratique que vous souhaitez utiliser pour votre projet, vous pouvez simplement changer la base de données en installant l'adaptateur approprié pour votre système de base de données. Waterline a adaptateurs officiels pour les systèmes de bases de données relationnelles populaires tels que MySQL et PostgreSQL et les bases de données NoSQL, comme MongoDB et Redis, et la communauté a également construit de nombreux adaptateurs pour les autres systèmes de bases de données populaires. , DB2, SQLite, CouchDB et neo4j. Dans le cas où vous ne pouvez pas trouver un adaptateur pour le système de base de données que vous voulez utiliser, vous pouvez développer votre propre adaptateur personnalisé .

    Waterline résume les différences entre les différents systèmes de base de données et vous permet d'avoir une interface normalisée pour que votre application puisse communiquer avec n'importe quel système de base de données pris en charge. Vous n'avez pas besoin de travailler avec SQL ou une API de bas niveau (pour les bases de données NoSQL) mais cela ne signifie pas que vous ne pouvez pas (au moins pour les bases de données SQL et MongoDB).

    besoin d'écrire du code SQL personnalisé, par exemple, pour des raisons de performances, pour travailler avec des exigences de base de données complexes ou pour accéder à des fonctionnalités spécifiques à la base de données. Dans ce cas, vous pouvez utiliser la méthode .query () disponible uniquement sur les modèles Waterline configurés pour utiliser les systèmes SQL (vous pouvez trouver plus d'informations sur query () depuis le docs ).

    Puisque différents systèmes de bases de données ont des caractéristiques communes et spécifiques aux bases de données, le Waterline ORM / ODM ne peut être bon que si vous vous contraintez à utiliser les fonctionnalités communes. De plus, si vous utilisez du SQL brut ou des API MongoDB natives, vous perdrez beaucoup de fonctionnalités de Waterline, y compris la possibilité de basculer entre différentes bases de données.

    Premiers pas avec Sails.js

    Maintenant que nous avons couvert les concepts de base et les fonctionnalités de Sails.js, voyons comment vous pouvez rapidement commencer à utiliser Sails.js pour créer de nouveaux projets et les soulever.

    Prérequis

    Avant de pouvoir utiliser Sails.js, vous devez avoir un environnement de développement avec Node.js (et npm) installé. Vous pouvez les installer tous les deux en vous rendant sur le site officiel Node.js et en téléchargeant le bon programme d'installation pour votre système d'exploitation.

     Node.js Télécharger la page

    Assurez-vous , aussi, pour installer n'importe quel système de gestion de base de données que vous voulez utiliser avec Sails.js (soit une base de données relationnelle ou NoSQL). Si vous n'êtes pas intéressé par l'utilisation d'un système de base de données à part entière, vous pouvez toujours travailler avec Sails.js grâce à sails-disk qui vous permet d'avoir une base de données sur fichier

    Installation de l'interface de ligne de commande Sails.js

    Après avoir satisfait aux exigences de développement, vous pouvez vous diriger vers votre terminal (Linux et macOS) ou l'invite de commande (Windows) et installer l'utilitaire de ligne de commande Sails.js , globalement, à partir de npm:

     sudo npm install sails -g
    

    Si vous voulez installer la dernière version 1.0 pour essayer les nouvelles fonctionnalités, vous devez utiliser la version bêta:

     npm install sails @ beta -g
    

    Vous pouvez ou ne pas avoir besoin de sudo pour installer des paquets globalement en fonction de votre configuration npm .

    Echafaudage d'un projet Sails.js

    Après l'installation de Sails.js CLI, vous pouvez aller de l'avant et échafauder un nouveau projet avec une seule commande:

     navigue nouveau sailsdemo
    

    Cela créera un nouveau dossier pour votre projet nommé sailsdemo dans votre répertoire actuel. Vous pouvez également scaffold vos fichiers de projet dans un dossier existant avec ceci:

     voile nouveau.
    

    Vous pouvez échafauder un nouveau projet Sails.js sans frontal avec ceci:

     voile un nouveau sailsdemo --no-frontend
    

    Plus d'informations sur les fonctionnalités de la CLI à partir des documents

    Le projet Anatomie d'un projet Sails.js

    Voici une capture d'écran d'un projet généré à l'aide de la CLI Sails.js:

     Un projet généré en utilisant le CLI de Sails.js

    Un projet Sails.js est un module Node.js avec un package.json et un node_modules dossier. Vous pouvez également remarquer la présence de Gruntfile.js . Sails.js utilise Grunt comme outil de construction pour créer des ressources frontales.

    Si vous construisez une application pour le navigateur, vous avez de la chance. Sails est livré avec Grunt – ce qui signifie que l'intégralité de votre flux de travail est entièrement personnalisable et prend en charge tous les grands modules Grunt déjà existants. Cela inclut la prise en charge de Less, Sass, Stylus, CoffeeScript, JST, Jade, Handlebars, Dust et bien d'autres. Lorsque vous êtes prêt à entrer en production, vos ressources sont minifiées et gzippées automatiquement. Vous pouvez même compiler vos ressources statiques et les envoyer vers un CDN comme CloudFront pour que votre application soit encore plus rapide. (Vous pouvez en lire plus sur ces points sur le site Sails.js .)

    Vous pouvez également utiliser Gulp ou Webpack comme système de construction au lieu de Grunt, avec des générateurs personnalisés. Voir les projets sails-generate-new-gulp et sails-webpack sur GitHub

    Pour plus de générateurs communautaires, voir cette page de documentation sur les voiles site .js.

    Le projet contient de nombreux fichiers et dossiers de configuration. La plupart d'entre eux sont explicites, mais revenons sur ceux avec lesquels vous travaillerez la plupart du temps:

    • api / controllers : c'est le dossier où vivent les contrôleurs. Les contrôleurs correspondent à la partie C de MVC . C'est là que la logique métier de votre application existe
    • api / models : le dossier où les modèles existent. Les modèles correspondent à la partie M de l'architecture MVC . C'est ici que vous devez placer des classes ou des objets qui correspondent à vos données SQL / NoSQL
    • api / policies : c'est le dossier dans lequel vous devez mettre des stratégies pour votre application
    • api / responses : ce dossier contient la logique de réponse du serveur telle que les fonctions pour gérer les réponses 404 et 500, etc.
    • api / services : ceci où vivent vos services. Un service est une classe globale encapsulant une logique commune qui peut être utilisée par de nombreux contrôleurs
    • ./ views : ce dossier contient des modèles utilisés pour afficher des vues. Par défaut, ce dossier contient les modèles de moteur ejs mais vous pouvez configurer tout moteur pris en charge par Express tel que EJS, Jade, Handlebars, Moustache et Underscore, etc.
    • ./config : ce dossier contient de nombreux fichiers de configuration qui vous permettent de configurer tous les détails de votre application, tels que CORS, protection CSRF, i18n, http, paramètres pour les modèles, vues, consignation et stratégies, etc. est config / routes.js où vous pouvez créer vos routes d'application et les mapper aux actions réelles dans les contrôleurs ou aux vues directement.
    • ./ assets : il s'agit du dossier dans lequel vous pouvez placer des fichiers statiques (CSS, JavaScript et images etc.) pour votre application.

    Exécuter votre projet Sails.js

    Vous pouvez démarrer le serveur de développement en exécutant la commande suivante à partir de la racine de votre projet:

     voiles ascenseur
    

    Cela vous demandera de choisir une stratégie de migration, puis lancera le serveur dev

     Lancer le serveur dev

    Vous pouvez ensuite utiliser votre navigateur Web pour naviguer vers [http://localhost:1337/] (http: // localhost: 1337 /) . Si vous avez généré un projet Sails.js avec un frontal (c'est-à-dire sans utiliser l'option -no-frontend ), vous verrez cette page d'accueil:

     Sails.js front- Page d'accueil du projet final

    Création de modèles de ligne d'eau

    Un modèle est une abstraction, généralement représentée par un objet ou une classe dans un langage de programmation général, et fait référence soit à un SQL table dans une base de données relationnelle ou un document (ou des paires clé-valeur) dans une base de données NoSQL.

    Vous pouvez créer des modèles à l'aide de l'interface CLI Sails.js:

     voiles génère un produit modèle
    

    Ceci va créer un modèle Product.js dans api / models avec le contenu suivant:

     / **
     * Product.js
     *
     * @description :: TODO: Vous pourriez écrire un court résumé de comment ce modèle fonctionne et ce qu'il représente ici.
     * @docs :: http://sailsjs.org/documentation/concepts/models-and-orm/models
     * /
    
    module.exports = {
    
      les attributs: {
    
      }
    }
    

    Vous pouvez ensuite augmenter votre modèle avec des attributs. Par exemple:

     module.exports = {
    
      les attributs: {
        prénom: {
          type: 'chaîne',
          defaultsTo: '',
          requis: "vrai"
        },
        la description: {
          type: 'chaîne',
          defaultsTo: ''
        },
        quantité: {
          type: 'entier'
        },
        utilisateur: {modèle: 'Utilisateur'}
      }
    }
    

    Remarquez comment nous pouvons définir l'association (relation un-à-plusieurs ou belongsTo) avec le modèle Utilisateur . Vous pouvez voir toutes les associations supportées et comment les créer via cette page d'associations Sails.js .

    Pour plus d'informations sur les attributs de modèle disponibles, voir la page des attributs Sails.js

    Vous pouvez également ajouter des configurations par modèle ou paramètres de modèle en ajoutant des propriétés de niveau supérieur dans la définition du modèle, qui remplacera les paramètres des modèles globaux dans config / models.js . Vous pouvez remplacer les paramètres liés aux attributs du modèle, aux connexions de base de données, etc.

    Par exemple, spécifions un magasin de données différent pour le modèle autre que le modèle global utilisé dans le projet:

     module. exportations = {
      connexion: 'mysqlcon'
      les attributs: { /*...*/}
    }
    

    Ceci demandera à Sails.js d'utiliser une connexion nommée mysqlcon pour stocker ces données de modèle. Assurez-vous que vous avez ajouté la connexion mysqlcon à l'objet connexions dans config / connections.js :

     module.exports.connections = {
      // sails-disk est installé par défaut.
      localDiskDb: {
        adaptateur: 'voiles-disque'
      },
      mysqlcon: {
        adaptateur: 'voiles-mysql',
        hôte: 'YOUR_MYSQL_HOST',
        utilisateur: 'YOUR_MYSQL_USER',
        mot de passe: 'YOUR_MYSQL_PASSWORD',
        base de données: 'YOUR_MYSQL_DB'
      }
    }
    

    Vous devez également installer l'adaptateur sails-mysql de npm:

     npm install sails-mysql@for-sails-0.12
    

    Vous pouvez trouver les paramètres de modèle disponibles que vous pouvez spécifier à partir de la page des paramètres du modèle Sails.js .

    Contrôleurs Sails.js

    Contrôleurs logique. Ils vivent dans api / controllers et fournissent une couche qui colle les modèles et les vues de votre application. Les contrôleurs contiennent des actions qui sont liées aux routes et répondent aux requêtes HTTP des clients web / mobile.

    Un contrôleur est un objet JavaScript qui contient des méthodes appelées actions du contrôleur qui prennent deux paramètres:

    Vous pouvez trouver plus d'informations sur les contrôleurs sur la page de contrôleurs Sails.js .

    Vous pouvez générer un contrôleur en utilisant la CLI Sails.js:

     voiles génèrent un produit contrôleur
    

    Cette commande va générer un contrôleur nommé api / controllers / ProductController.js avec le contenu suivant:

     / **
     * ProductController
     *
     * @description :: Logique côté serveur pour gérer les produits
     * @help :: Voir http://sailsjs.org/#!/documentation/concepts/Controllers
     * /
    
    module.exports = {
    
    }
    

    Le code exporte un objet JavaScript vide dans lequel vous pouvez ajouter de nouvelles actions ou remplacer les actions de contrôleur par défaut (automatiquement ajoutées)

    À ce stade, vous pouvez exécuter des opérations CRUD sur votre serveur sans ajouter de code. Comme Sails.js suit la convention sur la configuration, il relie vos contrôleurs à leurs routes correspondantes et fournit des actions par défaut pour gérer les requêtes HTTP POST, GET, PUT et DELETE courantes, etc.

    Testing with Postman

    Utilisation de Postman, vous pouvez envoyez des requêtes POST, GET et autres pour tester votre API, alors allez-y et récupérez la version Postman pour votre système d'exploitation . Ensuite, entrez l'URL du noeud final du produit http: // localhost: 1337 / product . Ensuite, choisissez la méthode HTTP à envoyer – POST dans ce cas, car nous voulons créer un produit. Ensuite, vous devez fournir des données, donc cliquez sur l'onglet Corps sélectionnez l'option Format brut puis entrez ce qui suit:

     {
         "nom": "Produit 1",
         "description": "Ceci est le produit 1",
         "quantité": 100
     }
    

    Puis cliquez sur le bouton Envoyer:

     Prêt à envoyer

    Vous devriez faire attention au code de retour: 200 OK signifie que le produit a été créé avec succès.

     200 OK

    Vous pouvez ensuite vérifier si les produits sont créés en envoyant une requête GET:

     Envoyer une requête GET

    Vous pouvez également mettre à jour un produit par son identifiant en envoyant un PUT request:

     Envoyer une requête PUT

    Enfin, vous pouvez supprimer un produit par son identifiant en envoyant une requête DELETE:

     Envoyer une requête DELETE

    Pour la logique personnalisée, vous pouvez également remplacer ces actions et implémenter la vôtre.

    Lorsque vous créez une API (un contrôleur et un modèle), Sails.js ajoute automatiquement huit actions par défaut, à savoir:

    • add vers
    • créer
    • détruire
    • rechercher un
    • trouver où
    • continuer quand
    • retirer de
    • mettre à jour

    Trouvez où et trouver un créer mettre à jour et détruire sont des actions CRUD normales qui doivent être présentes dans la plupart des API. Les autres sont liés à des enregistrements étrangers:

    • ajouter à : utilisé pour ajouter un enregistrement étranger à une autre collection d'enregistrements (par exemple un produit aux produits d'un utilisateur).
    • peupler où ]: utilisé pour remplir et renvoyer des enregistrements étrangers pour l'association donnée d'un autre enregistrement. Lire plus d'informations ici .
    • remove from : utilisé pour supprimer un enregistrement étranger (par exemple un produit) de l'une des associations de collecte d'enregistrements connexes (par exemple les produits de l'utilisateur). Voir plus d'informations et d'exemples ici .

    Pour personnaliser le comportement des actions par défaut, vous pouvez faire l'une des opérations suivantes:

    • Remplacer l'action dans un contrôleur spécifié. C'est-à-dire, créer une action avec le même nom que l'une de ces actions: trouver findOne créer mettre à jour détruire peupler ajouter ou supprimer .
    • Remplacer l'action par défaut pour tous les contrôleurs. Vous pouvez le faire en créant un dossier api / blueprints où vous devez ajouter des fichiers avec des noms en minuscules pour une action par défaut (par ex. find.js findone.js create.js etc.). Vous pouvez trouver plus d'informations sur les plans en consultant les docs Sails.js Blueprint API .

    Routing in Sails.js

    Les chemins vous permettent de mapper des URL aux contrôleurs ou aux vues . Tout comme les actions par défaut, Sails.js ajoute automatiquement des routes par défaut pour les actions par défaut, vous permettant d'avoir une API automatique en créant simplement des modèles et des contrôleurs.

    Vous pouvez également ajouter des routes personnalisées pour vos actions ou vues personnalisées. Pour ajouter un itinéraire, ouvrez le fichier config / routes.js et ajoutez-le:

     module.exports.routes = {
      '/des produits': {
        voir les produits'
      }
    }
    

    Cette mappe / products au gabarit nommé products dans le dossier views.

    Vous pouvez éventuellement ajouter un verbe HTTP à l'URL. Par exemple:

     module.exports.routes = {
      'get /': {
        voir: 'page d'accueil'
      }
    }
    

    Vous pouvez également spécifier une action de contrôleur pour un itinéraire. Par exemple:

     module.exports.routes = {
        'post / product': 'ProductController.create',
    }
    

    Cela indique à Sails.js d'appeler l'action create du contrôleur ProductController lorsqu'un client envoie une requête POST au point de terminaison / product . [19659142] Conclusion

    Dans cet article, vous avez été présenté à Sails.js. Nous avons examiné les concepts de base de Sails.js et comment générer un nouveau projet Sails.js, puis créé une API en générant simplement des modèles, en ajoutant des attributs puis en générant des contrôleurs. Sails.js a d'autres concepts avancés tels que services politiques plans et crochets . Vous pouvez les découvrir par vous-même, une fois que vous aurez compris et assimilé les concepts de base de cette introduction.