0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Tạo Máy Phát QR Code Đầy Đủ Từ MERN với GraphQL & MongoDB

Đăng vào 1 tháng trước

• 3 phút đọc

Tạo Máy Phát QR Code Đầy Đủ Từ MERN với GraphQL & MongoDB (Không Cần API Bên Ngoài!)

Bạn đã bao giờ cần tạo một mã QR cho một URL nhưng không muốn phụ thuộc vào các API bên ngoài chưa? Trong bài viết này, tôi sẽ hướng dẫn bạn xây dựng một dịch vụ tạo mã QR sử dụng công nghệ MERN (MongoDB, Express, React, Node.js) và GraphQL mà không cần đến bất kỳ API nào. Dưới đây là cách tôi đã thực hiện để phục vụ cho đám cưới của mình, nơi mà khách mời có thể quét mã QR để truy cập vào trang chia sẻ hình ảnh.

🎯 Mục Tiêu Dự Án

Mục tiêu của dự án là tạo ra một dịch vụ chuyển đổi URL thành mã QR, lưu trữ mã QR trong MongoDB và phục vụ nó cho frontend qua GraphQL mà không cần đến API bên ngoài.

🧱 Công Nghệ Sử Dụng

  • Frontend: Next.js 14+ với TypeScript, TailwindCSS, Apollo Client
  • Backend: Node.js, Express, Apollo Server (GraphQL), MongoDB
  • Extras: Hình ảnh mã QR Base64, mô hình Mongoose, schema/resolvers GraphQL

🗂️ Phân Tích Tính Năng

Dưới đây là các tính năng mà chúng ta sẽ triển khai trong dự án:

  • Mở issue cho tính năng mã QR
  • Tạo mô hình Mongoose: QRCode.ts
  • Thêm các loại QRCode vào schema GraphQL
  • Triển khai QRCodeService.ts:
    • generateQRCode
    • getQRCodeByUrl
    • getAllQRCodes
  • Tạo qrCodeTypes cho GraphQL
  • Xây dựng resolvers cho GraphQL
  • Xây dựng giao diện frontend: app/qr-code/page.tsx

🧠 Lựa Chọn Thiết Kế

Tại Sao Chọn Mã QR Base64?

  • ✅ Nhúng trực tiếp vào <img src="..."/>
  • ✅ Dễ dàng gửi qua email hoặc in
  • ✅ Không cần tải lên tệp hay cấu hình S3
  • ✅ Bảo mật và đơn giản

🧪 Ví Dụ Mutation

graphql Copy
mutation GenerateQRCode($input: QRCodeInput!) {
  generateQRCode(input: $input) {
    id
    url
    qrCodeData
    format
    size
    createdAt
    updatedAt
  }
}

Biến:

json Copy
{
  "input": {
    "url": "https://weddingln.com/memory-lane",
    "size": 300
  }
}

📥 Ví Dụ Query

graphql Copy
query GetQRCodeByUrl($url: String!) {
  qrCode(url: $url) {
    id
    url
    qrCodeData
    format
    size
    createdAt
    updatedAt
  }
}

Biến:

json Copy
{
  "url": "https://weddingln.com/memory-lane"
}

🖼️ Tích Hợp Frontend

html Copy
<img src="data:image/png;base64,{qrCodeData}" alt="Mã QR Chia Sẻ Tình Yêu" />

🚀 Kết Quả

Chúng ta đã có một dịch vụ mã QR đáng tin cậy và có thể tùy chỉnh cho dự án đám cưới của mình. Khách mời có thể quét mã QR và được chuyển hướng đến trang chia sẻ tình yêu.

🛠️ Tài Liệu Tham Khảo & Động Lực

Trước khi bắt đầu với tính năng mã QR này, tôi đã tìm kiếm các công cụ trực tuyến — những trình tạo mã QR “miễn phí”. Nhưng rất nhanh tôi nhận ra các vấn đề:

  • Các chi phí ẩn để chỉnh sửa hoặc theo dõi mã QR
  • Liên kết được lưu trữ có thể hết hạn hoặc chuyển hướng qua các miền của họ
  • Quảng cáo và thương hiệu không thể xóa bỏ

Thay vì phụ thuộc vào điều gì đó quan trọng này, tôi đã xây dựng nó vào trong hệ thống của mình:

  • 🧠 Tích hợp hoàn toàn vào kiến trúc MERN + GraphQL
  • 🔒 Lưu trữ trực tiếp trong MongoDB
  • 🖨️ Nhúng qua Base64, không cần lưu trữ tệp
  • 💡 Được cung cấp bởi gói qrcode npm
  • 🧪 Dễ dàng kiểm tra, tái sử dụng và mã nguồn mở

🧠 Bài Học Rút Ra

  • MERN + GraphQL cho phép tạo ra các API sạch sẽ, mô-đun
  • Sử dụng Base64 giúp đơn giản hóa việc xử lý tệp
  • Mongoose & Apollo Server = một cặp đôi mạnh mẽ
  • Lập kế hoạch trước (theo dõi vấn đề, lớp dịch vụ) sẽ mang lại kết quả tốt

💬 Câu Hỏi?

Bạn có ý kiến, ý tưởng hoặc muốn sử dụng điều này trong dự án của mình? Hãy kết nối — để lại một bình luận hoặc tin nhắn!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào