В результате люди начали использовать back end разработку с помощью Node. Одна из самых важных вещей back end системы эффективное взаимодействие с базой данных. Для этого используется ORM( объектно-реляционного отображение). ORM упрощает разработку, позволяет программисту взаимодействовать с базой данных используя объекты. В этой статье мы рассмотрим ORM библиотеку для Node.js — Bookshelf.js.
Что такое ORM?
Википедия определяет объектно-реляционного отображение как:
технология программирования, которая связывает для преобразования данных несовместимые типы систем: базу данных и данные объектно-ориентированного языка программирования, создавая «виртуальную объектную базу данных», которую можно использоваться внутри языка программирования
В нашем случае, язык программирования JavaScript, и несовместимая система является реляционная база данных, такая как MySQL. Это означает, что ORM библиотека должна позволить нам взаимодействовать с базами данных таким же образом как мы взаимодействуем с обычными объектами в JavaScript. Есть много библиотек ORM, которые существуют для Node.js, наиболее популярные из них: Persistence.js, Sequelize.js и Bookshelf.js. Здесь мы рассмотрим Bookshelf.js.
Пример использования Bookshelf.js
Взаимодействие базой данных, как правило, сосредоточены вокруг четырех операций CRUD — создание, чтение, обновление и удаление. Bookshelf.js обеспечивает интуитивный способ этого взаимодействия. Пример создания выглядит следующим образом:
new Post({name: 'New Article'}).save().then(function(model) {
// ...
});
Здесь Post является моделью, которая имеет соответствующую таблицу базы данных а name является атрибутом, который соответствует полю в таблице базы данных.
Операция чтения выглядит следующим образом:
// select * from `user` where `email` = 'user@mail.com'
new User({email: 'user@mail.com'})
.fetch()
.then(function(model) {
console.log(model.get('gender'));
});
Обратите внимание на вызов then в коде. Bookshelf.js поддерживает интерфейсы взаимодействия, который в данном случае означают, что анонимная функция будет вызван только если наш запрос был успешным. model является результирующим объектом JavaScript, который можно использовать для доступа к атрибутам User. В нашем случае model.get (‘gender’) возвращает пол нашего пользователя.
Разработка с Bookshelf.js и Express.js
Для более полного примера, предположим, что мы должны построить API JSON для блога со следующими методами:
GET /api/article
GET /api/article/:article_id
POST /api/article
У нас есть база данных MySQL со следующими параметрами:
create table article (
id int not null primary key,
title varchar(100) null,
body text null,
author varchar(100) null
);
Для начала, нам нужно настроить наш Express.js среду с package.json:
{
"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": "*"
}
}
Для bookshelf нам нужны knex, построитель запросов, и bluebird. Наша структура app.js теперь выглядит следующим образом:
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: '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);
app.use(bodyParser.urlencoded());
app.use(bodyParser.json());
app.use(bodyParser.json({type: 'application/vnd.api+json'}));
var bookshelf = app.get('bookshelf');
// {здесь будет код определения нашей модели}
app.listen(3000, function() {
console.log('Express started at port 3000');
});
Наша база данных называется blog. Нам необходимо определить модель Article и связать ее с таблицей article. Заменим // {здесь будет код определения нашей модели} на следующий код:
var Article = bookshelf.Model.extend({
tableName: 'article'
});
Вот и все, что нужно для определения модели в Bookshelf.js. Теперь мы можем использовать эту модель для запросов к базе данных в нашем API. Начнем с метода GET /api/article, он должен вернуть все статьи в базе данных:
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');
});
});
fetchAll в Bookshelf.js извлекает все записи в таблице базы данных, а catch выполняется только в случае возникновения ошибки.
Вывод
Node.js развивается как технология и может быть использована для создания веб-приложений и интерфейса API с помощью модулей, таких как Bookshelf.js для облегчения взаимодействия с реляционной базой данных.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий