В этом руководстве вы узнаете, как использовать данные запросов из 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() для выбора одной или нескольких строк из базы данных.