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

