Các phương thức lấy dữ liệu từ Database trong Next.js 15

18:51 25/03/2025

Next.js 15 mang đến nhiều cải tiến vượt trội, đặc biệt là khả năng tương tác với database một cách hiệu quả. Bài viết này FPT Polytechnic TP HCM sẽ đi sâu vào các phương thức lấy dữ liệu từ database trong Next.js 15, bao gồm: Lấy trực tiếp từ database trong Server Component; Lấy dữ liệu thông qua fetch API trong Server Component; Lấy dữ liệu thông qua fetch API trong Client Component.

Lấy dữ liệu trực tiếp trong Server Component

Do code NextJS cũng chạy trên Server , nên trong NextJS bạn có thể code lấy trực tiếp database với các module tương tác database quen thuộc như mysql, Prisma, Sequelize, Mongoose…

Lấy kiểu này đơn giản , trực quan, không cần API trung gian, nhưng chỉ dùng trong Server Component, không có tương tác client-side.  Sau đây là ví dụ lấy dữ liệu từ MySQL với Sequelize:

  • Cài đặt module:  npm install sequelize pg-hstore mysql2 
  • Tạo file app/san-pham/page.tsx và code:
// app/san-pham/page.tsx
import { Sequelize } from "sequelize";
const sequelize = new Sequelize("laptop_node", "root", "",
{ host: "localhost", dialect: "mysql", dialectModule: require('mysql2')}
);
export default async function SP() {
let sql = 'SELECT * FROM san_pham ORDER BY ngay DESC LIMIT 0, 10'
const [sp_arr] = await sequelize.query(sql);
return (
<div id="listsp">
{sp_arr.map( (sp:any) => <div key={sp.id}> {sp.ten_sp} </div>)}
</div>
)}

Lấy dữ liệu thông qua Fetch API trong Server Component

Ngoài cách tương tác trực tiếp với database trên server. Bạn cũng có thể thực hiện call api nhưng là call trên server. Lấy kiểu này quen thuộc, có thể call API bên ngoài, nhưng nếu nguồn API bị lỗi thì khó biết chuyện gì xảy ra.  Sau đây là code call api chạy trên server lấy dữ liệu:

// app/products/page.tsx
"use server"
export default async function ProductsPage() {
const res = await fetch("https://fakestoreapi.com/products");
const products = await res.json();
return (
<div>
{products.map((product: any) =>
<div key={product.id}>
{product.title}
</div>
)}
</div>
)}

Lấy dữ liệu thông qua fetch API trong Client Component

Dùng lệnh fetch trong trình duyệt để call api đến server là cách rất phổ biến. Cách này có ưu điểm là có thể fetch theo sự kiện của người dùng , nhưng nhược điểm là Không tối ưu SEO vì dữ liệu chỉ tải khi client render.

//app/sp/page.tsx
"use client";
import { useEffect, useState } from "react";
export default function ProductsPage() {
const [products, setProducts] = useState([]);
useEffect(() => {
fetch("https://fakestoreapi.com/products")
.then( res => res.json() )
.then( data => setProducts(data) )
}, []);
return (
<div>
{products.map((product: any) =>
<div key={product.id}>
{product.title}
</div>
)}
</div>
)}

Tóm tắt các phương thức lấy dữ liệu

Phương Thức Khi Nào Dùng? SEO Hiệu Suất
Lấy trực tiếp trong Server Component Dữ liệu tĩnh, không cần tương tác người dùng. Tốt Nhanh
Lấy dữ liệu qua fetch API trong Server Component Lấy dữ liệu từ API bên ngoài. Tốt Nhanh
Gọi API trong Client Component Dữ liệu động, thay đổi theo hành động người dùng. Không tốt Chậm hơn

Lựa chọn phương thức phù hợp

  • Sử dụng Server Component cho dữ liệu tĩnh, không cần cập nhật theo hành động người dùng.
  • Sử dụng Client Component cho dữ liệu động, cần cập nhật theo thời gian thực hoặc hành động người dùng.
  • Khi sử dụng API bên ngoài thì có thể dùng fetch trong Server Component hoặc Client Component.

Next.js 15 cung cấp nhiều phương thức linh hoạt để lấy dữ liệu từ database, giúp bạn xây dựng ứng dụng web hiệu quả và tối ưu. Việc lựa chọn phương thức phù hợp phụ thuộc vào yêu cầu cụ thể của từng dự án.

Giảng viên Nguyễn Văn Long
Bộ môn Công nghệ thông tin
FPT Polytechnic TP HCM

Hỗ trợ tư vấn và giải đáp thông tin tuyển sinh FPT Polytechnic

Cùng chuyên mục

Đăng ký nhập học tại FPT Polytechnic 2026

  • Max. file size: 50 MB.
  • Max. file size: 50 MB.
  • Max. file size: 50 MB.