Вопрос проверяет понимание того, как Next.js позволяет взаимодействовать с backend-ресурсами (базами данных, внешними API) непосредственно из серверного кода, не подвергая клиента рискам безопасности.
Да, абсолютно. В Next.js можно и нужно напрямую обращаться к базам данных или внутренним API из Server Components, Server Actions или API Routes. Ключи доступа и логика остаются на сервере, никогда не попадая в клиентский код, что обеспечивает безопасность
Next.js — это полноценный full-stack фреймворк, который позволяет писать backend-логику рядом с frontend.
Способы работы с данными на сервере:
Непосредственно в Server Components:
Можно импортировать и использовать ORM (как Prisma) или драйверы БД прямо в компоненте.
Это безопасно, так как код никогда не попадает в браузер.
// app/users/page.js
import prisma from '@/lib/prisma'; // Импортируем клиент БД
export default async function UsersPage() {
const users = await prisma.user.findMany(); // Прямой запрос к БД
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}Через API Routes:
Создайте endpoint в папке app/api/route.js.
К нему можно обращаться и из клиентских компонентов через fetch.
Через Server Actions:
Позволяют вызывать асинхронные функции на сервере прямо из клиентских компонентов (например, при отправке формы).
Важно для безопасности:
Никогда не подключайтесь к БД из Client Components. Делайте это только в Server Components, API Routes или Server Actions.
Все секретные ключи (API-ключи, connection strings) храните в переменных окружения, к которым у клиента нет доступа.