Node.js คือ ตอนที่ 4 : การใช้งานฐานข้อมูล (Databases)

  1. ทำไมต้องใช้ฐานข้อมูล
  2. ฐานข้อมูล SQL ที่ไช้ได้ใน Node.js
    2.1 Sequelize
  3. ฐานข้อมูล NoSQL ใน Node.js
    3.1 Mongoose
  4. ทำอย่างง่ายด้วย Node.js และ MongoDB

Node.js กลายเป็นตัวเลือกยอดนิยมสำหรับนักพัฒนาเมื่อทำแอพฝั่งเซิร์ฟเวอร์ เนื่องจากประสิทธิภาพการทำงานที่มีประสิทธิภาพและการใช้งานที่ง่ายเป็นหลัก ส่วนสำคัญของแอปพลิเคชันเหล่านี้มักเกี่ยวข้องกับการโต้ตอบกับฐานข้อมูลเพื่อคงอยู่ จัดการ และดึงข้อมูล ในบทความนี้ เราจะมาดูกันว่า Node.js ทำงานร่วมกับทั้งฐานข้อมูล SQL และ NoSQL ได้อย่างไร โดยเน้นไปที่ PostgreSQL, MySQL และ MongoDB จากนั้นเราจะทำแอพง่ายๆ เพื่อนำทฤษฎีไปสู่การปฏิบัติ

1. ทำไมต้องใช้ฐานข้อมูล

ฐานข้อมูลคือระบบที่ช่วยให้สามารถจัดเก็บ จัดการ และเรียกใช้ข้อมูลได้ เป็นส่วนสำคัญของเว็บแอปพลิเคชันส่วนใหญ่และมาในสองรูปแบบหลัก ได้แก่ ฐานข้อมูล SQL (Structured Query Language) เช่น PostgreSQL และ MySQL และฐานข้อมูล NoSQL เช่น MongoDB แบบแรกใช้สคีมาและความสัมพันธ์ที่กำหนดไว้ล่วงหน้า ในขณะที่แบบหลังให้ความยืดหยุ่นมากกว่าด้วยโมเดลข้อมูลแบบไม่ใช้สคีมา

2. ฐานข้อมูล SQL ที่ไช้ได้ใน Node.js

เรามาพูดถึงฐานข้อมูล SQL กันก่อน SQL เป็นภาษาที่ใช้ในการสื่อสารและจัดการฐานข้อมูลที่เป็นไปตามแบบจำลองเชิงสัมพันธ์ PostgreSQL และ MySQL เป็นฐานข้อมูล SQL ที่ได้รับความนิยมเนื่องจากความทนทานและความน่าเชื่อถือ

Node.js สื่อสารกับฐานข้อมูล SQL โดยใช้โมดูลต่างๆ หนึ่งในความนิยมมากที่สุดคือ Sequelize ซึ่งเป็นไลบรารี Object-Relational Mapping (ORM) Sequelize นำเสนอสิ่งที่เป็นนามธรรมในระดับสูงที่สะดวกสบายบนฐานข้อมูล SQL ช่วยให้นักพัฒนาสามารถโต้ตอบกับฐานข้อมูลโดยใช้ JavaScript

2.1 Sequelize

ในการติดตั้ง Sequelize และไดรเวอร์ที่เกี่ยวข้องสำหรับฐานข้อมูล SQL ของคุณ ให้ใช้คำสั่ง npm ต่อไปนี้:

npm install --save sequelize
npm install --save pg pg-hstore # For PostgreSQL
npm install --save mysql2 # For MySQL

ด้วย Sequelize คุณสามารถกำหนดโมเดลที่สอดคล้องกับตารางฐานข้อมูลได้ โมเดลคือคลาสที่แมปกับข้อมูลในตาราง วิธีกำหนดUserโมเดล มีดังนี้

const { Sequelize, DataTypes, Model } = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
});

class User extends Model {}

User.init({
  // Model attributes are defined here
  firstName: {
    type: DataTypes.STRING,
    allowNull: false
  },
  lastName: {
    type: DataTypes.STRING
    // allowNull defaults to true
  }
}, {
  sequelize, 
  modelName: 'User'
});

เมื่อกำหนดโมเดลแล้ว คุณสามารถดำเนินการ CRUD เช่นcreate, read, update, และdeleteด้วยวิธี JavaScript อย่างง่าย

3. ฐานข้อมูล NoSQL ใน Node.js

มาดูฐานข้อมูล NoSQL กัน MongoDB เป็นฐานข้อมูล NoSQL ยอดนิยมที่ใช้สำหรับความสามารถในการปรับขนาดและความยืดหยุ่น เหมาะอย่างยิ่งเมื่อต้องจัดการกับข้อมูลจำนวนมาก และเมื่อคุณต้องการความสามารถในการปรับสคีมาเมื่อเวลาผ่านไป

เช่นเดียวกับ Sequelize Node.js สื่อสารกับ MongoDB โดยใช้ไลบรารี Object-Document Mapper (ODM) ที่เรียกว่า Mongoose Mongoose อนุญาตให้นักพัฒนา Node.js กำหนดออบเจกต์ด้วยสคีมาที่เข้มงวดซึ่งแมปกับเอกสาร MongoDB

3.1 Mongoose

ในการติดตั้ง Mongoose ให้ใช้คำสั่ง npm ต่อไปนี้:

npm install --save mongoose

ด้วย Mongoose คุณสามารถกำหนดโมเดลที่สอดคล้องกับคอลเลกชันใน MongoDB วิธีกำหนด User โมเดล มีดังนี้

const mongoose = require('mongoose');
const { Schema } = mongoose;

const userSchema = new Schema({
firstName: String,
lastName: String
});

const User = mongoose.model('User', userSchema);

เช่นเดียวกับ Sequelize เมื่อกำหนดโมเดล Mongoose แล้ว คุณสามารถดำเนินการ CRUD โดยใช้วิธี JavaScript อย่างง่าย

4. ทำอย่างง่ายด้วย Node.js และ MongoDB

เพื่อสาธิตวิธีรวม Node.js กับฐานข้อมูล มาทำแอพอย่างง่ายโดยใช้ Node.js, Express.js และ MongoDB

การตั้งค่าโครงการ

ขั้นแรก เริ่มต้นโครงการ Node.js ใหม่ และติดตั้งการอ้างอิงที่จำเป็น:

npm init -y
npm install express mongoose

จากนั้นตั้งค่าเซิร์ฟเวอร์ Express อย่างง่ายในserver.jsไฟล์:

const express = require('express');
const mongoose = require('mongoose');
const app = express();

app.use(express.json());

// Database connection
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });

// Check if the connection is successful
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log('Connected to the database');
});

// Start the server
app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

การกำหนดโมเดล

ตอนนี้มากำหนดUserโมเดลในmodels/User.jsไฟล์:

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: String,
  email: String,
  password: String
});

module.exports = mongoose.model('User', userSchema);

การสร้างเส้นทาง (Routes)

หลังจากกำหนดโมเดลแล้ว ให้สร้างเส้นทางเพื่อจัดการการดำเนินการที่เกี่ยวข้องกับผู้ใช้ สำหรับตัวอย่างนี้ เราจะตั้งค่าสองเส้นทาง: เส้นทางหนึ่งสำหรับสร้างผู้ใช้ใหม่และอีกเส้นทางหนึ่งสำหรับการดึงข้อมูลผู้ใช้ทั้งหมด เส้นทางเหล่านี้จะอยู่ในไฟล์ routes/userRoutes.js :

const express = require('express');
const User = require('../models/User');
const router = express.Router();

router.post('/new', async (req, res) => {
try {
const user = new User(req.body);
await user.save();
res.status(200).json(user);
} catch (error) {
res.status(500).json({ error: error.message });
}
});

router.get('/', async (req, res) => {
try {
const users = await User.find();
res.status(200).json(users);
} catch (error) {
res.status(500).json({ error: error.message });
}
});

module.exports = router;

การใช้เส้นทาง (Routes)

สุดท้าย นำเข้าและใช้เส้นทางใน server.js ไฟล์:

const userRoutes = require('./routes/userRoutes');

app.use('/users', userRoutes);

ตอนนี้แอปพลิเคชันพร้อมแล้ว คุณสามารถเริ่มเซิร์ฟเวอร์ด้วยnode server.js และใช้เครื่องมือทดสอบ API เช่น Postman เพื่อทดสอบจุดสิ้นสุด

แอปพลิเคชันที่เรียบง่ายนี้ให้ความเข้าใจพื้นฐานเกี่ยวกับวิธีที่ Node.js โต้ตอบกับฐานข้อมูล NoSQL เช่น MongoDB จากที่นี่ คุณสามารถสำรวจคุณลักษณะเพิ่มเติม เช่น การตรวจสอบความถูกต้อง การสอบถามที่ซับซ้อน และอื่นๆ


ฐานข้อมูลเป็นส่วนสำคัญของแอปพลิเคชันแบ็คเอนด์ และ Node.js ให้การสนับสนุนที่ยอดเยี่ยมสำหรับทั้งฐานข้อมูล SQL และ NoSQL ต้องขอบคุณไลบรารีอย่าง Sequelize และ Mongoose เมื่อเข้าใจวิธีการทำงานของไลบรารีเหล่านี้และวิธีที่สามารถใช้โต้ตอบกับฐานข้อมูลได้ คุณจะสามารถทำแอพที่ซับซ้อนและมีประสิทธิภาพมากขึ้นได้


Node.js คืออะไร

Node.js คือ ตอนที่ 3 : ระบบเครือข่าย (Networking) และ HTTP
Node.js คือ ตอนที่ 5 : การทำแอพแบบ Real-time ด้วย Socket.io