Points de base
Ces dernières années, JavaScript a augmenté en popularité. Au fil des ans, les gens ont essayé d'appliquer ce langage populaire à plusieurs reprises du serveur. L'une des tentatives les plus réussies était Node.js, qui a été recommandé à la communauté comme un moyen d'écrire des applications de serveur rapidement. Le point de vente du nœud est la vitesse, tant en termes de performance et de temps de développement. Avec cette popularité, la communauté continue de croître et le projet bénéficie également de plus de contributeurs, entraînant des modules de haute qualité tels que Express.js.
Les gens ont donc commencé à construire un backend complet à l'aide du nœud. L'une des choses les plus importantes qu'un système backend devrait faire est de communiquer efficacement avec la base de données. C'est là que le logiciel de cartographie des relations d'objet (ORM) entre en jeu. Souvent, les développeurs doivent être compétents dans le langage de programmation et SQL qu'ils utilisent afin de communiquer avec les bases de données. ORM simplifie le processus de développement en permettant aux développeurs d'interagir avec la base de données à l'aide d'objets dans leur langage de programmation de choix. Cet article présente Orm et accorde une attention particulière à la librairie.js orm.
Qu'est-ce que l'ORM?
wikipedia définit la cartographie des relations objets comme:
Une technique de programmation pour convertir les données entre les systèmes de type incompatible dans les langages de programmation orientés objet. Cela crée en fait une "base de données d'objets virtuelle" qui peut être utilisée en interne dans le langage de programmation.
Dans notre exemple, le langage de programmation est JavaScript, et le système incompatible est un système de base de données relationnel, comme MySQL. Cela signifie que la bibliothèque ORM devrait nous permettre de communiquer avec la base de données de la même manière que d'interagir avec les objets JavaScript conventionnels. Il existe de nombreuses bibliothèques ORM dans Node.js, et les bibliothèques populaires incluent persistance.js, séquelize.js et libylf.js. Cet article présentera la librairie.js.
librairie.js Exemple
Les interactions de la base de données tournent généralement autour de quatre opérations CRUD: créer, lire, mettre à jour et supprimer. Bookshelf.js fournit un moyen intuitif d'effectuer ces opérations, par exemple, créer des opérations comme celle-ci:
new Post({name: 'New Article'}).save().then(function(model) { // ... });
Supposons que la publication est un modèle avec la table de base de données correspondante, et le nom est une propriété qui correspond à une colonne de la table de base de données.
De même, l'opération de lecture est la suivante:
new Post({name: 'New Article'}).save().then(function(model) { // ... });
Veuillez noter alors l'appel dans le code. Bookshelf.js prend en charge une interface basée sur des promesses, auquel cas cela signifie que la fonction anonyme transmise à alors ne sera appelée que lorsque la requête réussit. Un modèle est un objet JavaScript généré que vous pouvez utiliser pour accéder aux propriétés associées à l'utilisateur. Dans notre exemple, Model.get («Gender») renvoie le sexe de l'utilisateur.
Build API avec libylf.js et express.js
Pour un exemple plus complet, supposons que nous soyons délégués pour construire un blog avec l'API JSON des ressources suivantes:
// select * from `user` where `email` = 'user@mail.com' new User({email: 'user@mail.com'}) .fetch() .then(function(model) { console.log(model.get('gender')); });
et le client a déjà le tableau suivant:
<code>GET /api/article GET /api/article/:article_id POST /api/article</code>
Tout d'abord, nous devons utiliser package.json pour configurer l'environnement express.js:
create table article ( id int not null primary key, title varchar(100) null, body text null, author varchar(100) null );
Nous avons besoin du constructeur de requête Knex car la bibliothèque en dépend, et nous avons besoin de Bluebird pour gérer la promesse. Notre structure app.js est la suivante:
{ "name": "article_api", "description": "expose articles via JSON", "version": "0.0.1", "private": true, "dependencies": { "bluebird": "^2.1.3", "body-parser": "^1.3.1", "express": "4.4.3", "mysql": "*", "knex": "*", "bookshelf": "*" } }
Notre base de données MySQL s'appelle Blog. Nous devons définir le modèle d'article et le lier au tableau d'articles. Nous remplacerons // {notre code de définition de modèle ici}:
// 当应用程序启动时 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var Promise = require('bluebird'); var dbConfig = { client: 'mysql', connection: { host: 'localhost', user: 'root', password: 'your_password', database: 'blog', charset: 'utf8' } }; var knex = require('knex')(dbConfig); var bookshelf = require('bookshelf')(knex); app.set('bookshelf', bookshelf); var allowCrossDomain = function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); next(); }; app.use(allowCrossDomain); // 解析 application/x-www-form-urlencoded app.use(bodyParser.urlencoded()); // 解析 application/json app.use(bodyParser.json()); // 解析 application/vnd.api+json 为 json app.use(bodyParser.json({type: 'application/vnd.api+json'})); // 在其他地方,使用 bookshelf 客户端: var bookshelf = app.get('bookshelf'); // {我们的模型定义代码在这里} app.listen(3000, function() { console.log('Express started at port 3000'); });
Il ne fait aucun doute que c'est tout ce dont vous avez besoin pour définir un modèle dans la bibliothèque.js. Nous pouvons maintenant utiliser ce modèle pour interroger la base de données dans notre API. Tout d'abord, la méthode GET / API / Article doit renvoyer tous les articles dans la base de données:
var Article = bookshelf.Model.extend({ tableName: 'article' });
fetchall dans bibliothèque.js obtient toutes les entrées dans la table de la base de données et Catch n'est effectué que si une erreur se produit (il y a plus de méthodes de modèle dans le document).
Conclusion
Node.js a été développé en tant que technologie et peut être utilisé pour créer des applications Web et des API via des modules tels que Express.js. Bookshelf.js facilite l'interaction avec la base de données relationnelle des applications Node.js plus facilement en encapsulant la structure de la table de base de données sous-jacente et en exposant des objets JavaScript réguliers pour la requête. Cet article fournit une introduction de haut niveau. La mise en œuvre complète du projet de démonstration est disponible sur GitHub. (Le lien github doit être ajouté ici, s'il existe)
librairie Qu'est-ce que la librairie.js et pourquoi devrais-je l'utiliser?
Comment installer la librairie.js?
Pour connecter la bibliothèque.js à votre base de données, vous devez d'abord initialiser knex.js avec votre configuration de base de données. Vous passez ensuite cette instance Knex initialisée à la librairie.js. Voici un exemple de base:
new Post({name: 'New Article'}).save().then(function(model) { // ... });
Dans la librairie.js, le modèle est défini en étendant le modèle de classe de base fournis par bibliothèque.js. Voici un exemple qui définit le modèle utilisateur:
// select * from `user` where `email` = 'user@mail.com' new User({email: 'user@mail.com'}) .fetch() .then(function(model) { console.log(model.get('gender')); });
Il est très simple d'extraire des données d'une base de données à l'aide de bibliothèque.js. Vous pouvez utiliser la méthode Fetch fournie par le modèle. Voici un exemple:
<code>GET /api/article GET /api/article/:article_id POST /api/article</code>
Il est également facile d'enregistrer des données dans la base de données à l'aide de bibliothèque.js. Vous pouvez utiliser la méthode de sauvegarde fournie par le modèle. Voici un exemple:
create table article ( id int not null primary key, title varchar(100) null, body text null, author varchar(100) null );
Les données de la base de données peuvent être mises à jour à l'aide de la méthode de sauvegarde. Il vous suffit d'extraire le modèle d'abord, puis d'appeler Enregistrer avec les nouvelles données. Voici un exemple:
{ "name": "article_api", "description": "expose articles via JSON", "version": "0.0.1", "private": true, "dependencies": { "bluebird": "^2.1.3", "body-parser": "^1.3.1", "express": "4.4.3", "mysql": "*", "knex": "*", "bookshelf": "*" } }
Les données peuvent être supprimées de la base de données à l'aide de la méthode de destruction fournie par le modèle. Voici un exemple:
// 当应用程序启动时 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var Promise = require('bluebird'); var dbConfig = { client: 'mysql', connection: { host: 'localhost', user: 'root', password: 'your_password', database: 'blog', charset: 'utf8' } }; var knex = require('knex')(dbConfig); var bookshelf = require('bookshelf')(knex); app.set('bookshelf', bookshelf); var allowCrossDomain = function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); next(); }; app.use(allowCrossDomain); // 解析 application/x-www-form-urlencoded app.use(bodyParser.urlencoded()); // 解析 application/json app.use(bodyParser.json()); // 解析 application/vnd.api+json 为 json app.use(bodyParser.json({type: 'application/vnd.api+json'})); // 在其他地方,使用 bookshelf 客户端: var bookshelf = app.get('bookshelf'); // {我们的模型定义代码在这里} app.listen(3000, function() { console.log('Express started at port 3000'); });
libshelf.js fournit plusieurs façons de gérer les relations entre les modèles, tels que Hasone, Hasmany, Belongsto et Belongstomany. Voici un exemple de modèle d'utilisateur avec plusieurs modèles de post:
var Article = bookshelf.Model.extend({ tableName: 'article' });
Les transactions dans la librairie.js peuvent être gérées à l'aide de la méthode de transaction fournie par knex.js. Voici un exemple:
app.get('/api/article', function(req, res) { new Article().fetchAll() .then(function(articles) { res.send(articles.toJSON()); }).catch(function(error) { console.log(error); res.send('An error occured'); }); });
Veuillez noter que certains des détails des exemples de code ci-dessus peuvent devoir être ajustés en fonction de votre base de données et de votre environnement spécifiques. En outre, il est recommandé de se référer à la documentation officielle de Bookshelf.js pour les dernières informations et des conseils plus détaillés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!