Node.js SQL-сервер: выбрать

В этом руководстве вы узнаете, как использовать данные запросов из SQL Server в Node.js.

Это руководство начинается с того места, где закончилось руководство по обновлению данных из Node.js.

Выбор одной строки

Шаг 1. Создайте новый файл в каталоге проекта с именем select.js.

Шаг 2. Определите новую функцию, которая находит автора по идентификатору:

import sql from 'mssql';
import { config } from './config.js';
const findAuthorById = async(id) => {
  try {
    // Connect to the database
    const pool = await sql.connect(config);
    // Execute the query
    const result = await pool
      .request()
      .input('id', sql.Int, id)
      .query(`SELECT * FROM Authors WHERE AuthorID = @id`);
    // return the result
    return result.recordset.length > 0 ? result.recordset[0] : null;
  } catch(err) {
    console.error(err);
  }
};

Функция findAuthorById выполняет следующие действия:

  • Подключитесь к базе данных.
  • Выполните запрос для поиска автора по идентификатору, используя параметризованный запрос для предотвращения SQL-инъекций.
  • Возвращает объект автора, если он найден.

Как это работает.

Сначала импортируйте объект SQL из пакета mssql и объект конфигурации из модуля config.js:

import sql from 'mssql';
import { config } from './config.js';

Пакет mssql позволяет взаимодействовать с SQL Server. Конфигурация — это объект, содержащий параметры базы данных для подключения.

Во-вторых, подключитесь к базе данных, используя предоставленный объект конфигурации:

const pool = await sql.connect(config);

Функция sql.connect() возвращает объект ConnectionPool, который позволяет выполнять запросы.

В-третьих, выполните запрос:

const result = await pool
  .request()
  .input('id', sql.Int, id)
  .query(`SELECT * FROM Authors WHERE AuthorID = @id`);

В этом заявлении:

  • pool.request() создает новый экземпляр запроса, представляющий один запрос, который вы хотите выполнить к базе данных.
  • .input(name, type, value) определяет входные параметры для запроса. В этом случае он определяет id с типом sql.Int, а значение — id.
  • .query(sqlQuery)выполняет SQL-запрос. В этом случае он использует входные параметры, определенные ранее(@id заменяется на значение параметра id).

В-четвертых, вернуть первую запись или null, если записи не найдены:

return result.recordset.length > 0 ? result.recordset[0] : null;

Шаг 3. Измените файл index.js, чтобы использовать функцию findAuthorById:

import { findAuthorById } from './select.js';
const author = await findAuthorById(1);
console.log(author);

Как это работает.

Сначала импортируем функцию findAuthorById из модуля select.js:

import { findAuthorById } from './select.js';

Во-вторых, вызовите функцию findAuthorById, чтобы найти автора с идентификатором 1:

const author = await findAuthorById(1);

В-третьих, укажите автора:

console.log(author);

Шаг 4. Запустите файл index.js:

npm start

Выход:

{
  AuthorID: 1,
  FirstName: 'George',
  LastName: 'Orwell',
  BirthDate: 1903-06-25T00:00:00.000Z
}

Выбор нескольких строк

Найдем авторов по фамилиям с помощью оператора LIKE.

Шаг 1. Измените файл select.js, добавив функцию findAuthorsByLastName:

async function findAuthorsByLastName(term) {
  try {
    // Connect to the database
    const pool = await sql.connect(config);
    // Execute a query
    const result = await pool
      .request()
      .input('term', sql.VarChar, `%${term}%`)
      .query(`SELECT * FROM Authors WHERE LastName LIKE @term`);
    return result.recordset;
  } catch(err) {
    console.error('Error finding authors by last name:', err);
  }
}

Как это работает.

Сначала подключитесь к SQL Server:

const pool = await sql.connect(config);

Во-вторых, найдите авторов, чьи фамилии содержат введенный термин, используя оператор LIKE с подстановочными знаками %:

const result = await pool
  .request()
  .input('term', sql.VarChar, `%${term}%`)
  .query(`SELECT * FROM Authors WHERE LastName LIKE @term`);

В-третьих, верните набор записей:

return result.recordset;

Шаг 2. Измените файл index.js, чтобы использовать функцию findAuthorsByLastName():

import { findAuthorsByLastName } from './select.js';
const authors = await findAuthorsByLastName('He');
console.log(authors);

Шаг 3. Выполните следующую команду на терминале, чтобы выполнить файл index.js:

npm start

Выход:

[
  {
    AuthorID: 11,
    FirstName: 'Ernest',
    LastName: 'Hemingway',
    BirthDate: 1899-07-21T00:00:00.000Z
  },
  {
    AuthorID: 20,
    FirstName: 'Mary',
    LastName: 'Shelley',
    BirthDate: 1797-08-30T00:00:00.000Z
  }
]

Загрузите исходный код проекта

Загрузите исходный код проекта

Краткое содержание

  • Используйте метод input() для параметризации запроса, чтобы предотвратить SQL-инъекции.
  • Используйте метод query() для выбора одной или нескольких строк из базы данных.
Мирослав С.

Автор статей, ИБ-специалист