Spec-Zone.ru › Sequelize 4
Руководство » Установка

Начало работы

Установка

Sequelize доступен через NPM и Yarn.

// Using NPM
$ npm install --save sequelize

# And one of the following:
$ npm install --save pg pg-hstore
$ npm install --save mysql2
$ npm install --save sqlite3
$ npm install --save tedious // MSSQL

// Using Yarn
$ yarn add sequelize

# And one of the following:
$ yarn add pg pg-hstore
$ yarn add mysql2
$ yarn add sqlite3
$ yarn add tedious // MSSQL

Настройка подключения

Sequelize устанавливает пул подключений при инициализации, поэтому в идеале следует создавать только один экземпляр на базу данных, если вы подключаетесь к БД из одного процесса. Если вы подключаетесь к БД из нескольких процессов, вам нужно будет создать по одному экземпляру на каждый процесс, но каждый экземпляр должен иметь максимальный размер пула подключений «максимальный размер пула подключений, деленный на количество экземпляров». Таким образом, если вы хотите максимальный размер пула подключений 90, а у вас 3 рабочих процесса, каждый экземпляр процесса должен иметь максимальный размер пула подключений 30.

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'|'sqlite'|'postgres'|'mssql',
  operatorsAliases: false,

  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },

  // SQLite only
  storage: 'path/to/database.sqlite'
});

// Or you can simply use a connection uri
const sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');

Конструктор Sequelize принимает множество опций, доступных в справочнике API.

Проверка подключения

Вы можете использовать функцию .authenticate() для проверки подключения следующим образом.

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });

Ваша первая модель

Модели определяются с помощью sequelize.define('name', {attributes}, {options}).

const User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING
  },
  lastName: {
    type: Sequelize.STRING
  }
});

// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
  // Table created
  return User.create({
    firstName: 'John',
    lastName: 'Hancock'
  });
});

Дополнительную информацию о создании моделей можно найти в справочнике API моделей

Ваш первый запрос

User.findAll().then(users => {
  console.log(users)
})

Дополнительную информацию о функциях поиска для моделей, таких как .findAll(), можно найти в разделе Получение данных, а информацию о выполнении конкретных запросов, таких как WHERE и JSONB, — в разделе Запросы.

Опции модели для всего приложения

Конструктор Sequelize принимает опцию define, которая будет использоваться в качестве опций по умолчанию для всех определённых моделей.

const sequelize = new Sequelize('connectionUri', {
  define: {
    timestamps: false // true by default
  }
});

const User = sequelize.define('user', {}); // timestamps is false by default
const Post = sequelize.define('post', {}, {
  timestamps: true // timestamps will now be true
});

Обещания

Sequelize использует обещания Bluebird для управления потоком асинхронных операций.

Примечание: Sequelize использует независимую копию экземпляра Bluebird. Вы можете получить к нему доступ, используя Sequelize.Promise, если хотите установить любые опции, специфичные для Bluebird

Если вы не знакомы с принципом работы обещаний, не беспокойтесь, вы можете прочитать об этом здесь.

В общем случае, обещание представляет собой значение, которое появится в какой-то момент — «я обещаю, что в какой-то момент я вам предоставлю результат или ошибку». Это означает, что

// DON'T DO THIS
user = User.findOne()

console.log(user.get('firstName'));

не будет работать! Это потому, что user — это объект обещания, а не строка данных из БД. Правильный способ сделать это:

User.findOne().then(user => {
  console.log(user.get('firstName'));
});

Если ваша среда или транспилятор поддерживают async/await, это будет работать, но только в теле функции async:

user = await User.findOne()

console.log(user.get('firstName'));

Когда вы разберётесь, что такое обещания и как они работают, используйте справочник API Bluebird в качестве основного инструмента. В частности, вы, вероятно, будете часто использовать .all.

Copyright © 2014–present Sequelize contributors
Licensed under the MIT License.
https://sequelize.org/v4/manual/installation/getting-started

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API