Tạo và chạy dự án Express.js với ServBay
Express.js là gì?
Express.js là một framework web nhanh, mã nguồn mở và tối giản dựa trên Node.js. Nó cung cấp một loạt tính năng mạnh mẽ để xây dựng các ứng dụng web đơn trang, đa trang hoặc kết hợp. Express.js là một trong những framework phổ biến nhất của hệ sinh thái Node.js nhờ thiết kế đơn giản và linh hoạt, rất được cộng đồng lập trình viên ưa chuộng.
Tính năng và ưu điểm chính của Express.js
- Đơn giản & Linh hoạt: Express.js cung cấp API dễ tiếp cận cùng cơ chế middleware linh hoạt, giúp phát triển web trở nên hiệu quả.
- Middleware: Hỗ trợ nhiều loại middleware, dễ dàng xử lý request/response như phân tích request body, quản lý session, phục vụ file tĩnh…
- Router mạnh mẽ: Xử lý request dựa trên các HTTP method (GET, POST, PUT, DELETE...) hoặc đường dẫn URL khác nhau.
- Khả năng tích hợp: Dễ dàng tích hợp với các template engine (Pug, EJS, Handlebars), cơ sở dữ liệu (MongoDB, MySQL, PostgreSQL) hoặc các module Node.js khác.
- Cộng đồng & Hệ sinh thái mạnh: Sở hữu cộng đồng lớn và rất nhiều middleware, plugin của bên thứ ba, dễ dàng tìm kiếm giải pháp và tài nguyên khi gặp vấn đề.
Express.js giúp lập trình viên nhanh chóng xây dựng các ứng dụng web và API hiệu năng cao. ServBay là công cụ phát triển web địa phương mạnh mẽ, cung cấp môi trường Node.js tiện lợi và các tính năng quản lý website (reverse proxy) cũng như cơ sở dữ liệu.
Tạo và chạy dự án Express.js với ServBay
Bài viết này sẽ hướng dẫn bạn cách tận dụng môi trường Node.js mà ServBay cung cấp để tạo, cấu hình và chạy một dự án Express.js. Chúng ta sẽ sử dụng tính năng Website của ServBay để thiết lập web server và truy cập dự án thông qua reverse proxy. Cách này đặc biệt phù hợp cho các ứng dụng cần chạy ở cổng tùy chỉnh như Node.js, Python, Go, Java…
Yêu cầu trước khi bắt đầu
Đảm bảo bạn đã đáp ứng các điều kiện sau:
- Đã cài đặt thành công ServBay trên macOS.
- Đã cài đặt và bật gói phần mềm Node.js trong ServBay (quản lý qua tab “Phần mềm” trên bảng điều khiển ServBay).
- (Tùy chọn) Nếu cần kết nối cơ sở dữ liệu, hãy cài đặt và bật các gói phần mềm cơ sở dữ liệu tương ứng trong ServBay (MariaDB, PostgreSQL, MongoDB, Redis, MySQL).
- Có kiến thức cơ bản về sử dụng Terminal/Command Line.
Khởi tạo dự án Express.js
Khởi tạo dự án
Đầu tiên, mở Terminal và di chuyển đến thư mục gốc website mà ServBay đề xuất:
/Applications/ServBay/www
. Sử dụng lệnhnpx express-generator
để tạo skeleton dự án Express.js nhanh chóng.npx
là công cụ đi kèm npm (từ v5.2+) giúp chạy các package Node.js.bashcd /Applications/ServBay/www npx express-generator servbay-express-app
1
2Lệnh này tạo thư mục
servbay-express-app
trong/Applications/ServBay/www
với cấu trúc dự án Express.js cơ bản.Cài đặt thư viện phụ thuộc
Vào thư mục dự án
servbay-express-app
vừa tạo, sử dụngnpm install
để cài các package cần thiết, bao gồm framework Express.js, template engine, static file service...bashcd servbay-express-app npm install
1
2Đợi quá trình cài đặt kết thúc.
Thay đổi nội dung hiển thị mặc định của dự án Express.js
Để kiểm tra dự án đã chạy thành công, chúng ta sẽ thay đổi output mặc định của trang chủ.
Sửa file
routes/index.js
Express.js dùng file route để xử lý các request theo URL. Mở file
routes/index.js
trong thư mục dự án. File này xử lý request GET tại path/
. Thay đổi code để gửi trả về text thay vì render template Pug mặc định.javascriptvar express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { // Thay đổi sang response dạng text res.send('Hello ServBay!'); }); module.exports = router;
1
2
3
4
5
6
7
8
9
10Lưu file lại.
Chạy dự án ở chế độ phát triển
Thông thường, trong quá trình phát triển, chúng ta sẽ chạy một server local để kiểm tra các cập nhật real-time. Express.js hỗ trợ chạy server thông qua lệnh npm start
.
Chạy server phát triển
Trong thư mục gốc dự án
servbay-express-app
, chạy lệnh sau để khởi động server. Thiết lập biến môi trườngPORT
cho cổng server, ví dụ dùng8585
. BiếnDEBUG
giúp hiện thông tin debug.bashcd /Applications/ServBay/www/servbay-express-app PORT=8585 DEBUG=servbay-express-app:* npm start
1
2Terminal sẽ thông báo server đang lắng nghe ở cổng
8585
.Cấu hình reverse proxy website trên ServBay
Vì dự án Express.js chạy trên cổng tùy chỉnh (8585) thay vì chuẩn (80/443), bạn cần tạo một website dạng reverse proxy trên ServBay. Web server của ServBay (thường là Caddy) sẽ lắng nghe cổng 80/443 và chuyển tiếp request đến ứng dụng Express.js chạy ở
127.0.0.1:8585
.Mở bảng điều khiển ServBay, chuyển tới tab “Website”, click thêm mới. Cấu hình như sau:
- Tên:
My first Express.js dev site
(tùy đặt giúp dễ nhận diện) - Tên miền:
servbay-express-test.servbay.demo
(chọn domain.servbay.demo
để có HTTPS tự động nhờ User CA của ServBay) - Loại website: chọn
Reverse proxy
- IP:
127.0.0.1
(hoặclocalhost
) - Cổng:
8585
(cổng ứng dụng Express.js)
Lưu và áp dụng thay đổi. ServBay sẽ tự động cấu hình server cũng như tạo chứng chỉ SSL (nếu dùng domain
.servbay.demo
).Tham khảo hướng dẫn chi tiết tại mục Thêm website Node.js phát triển trong tài liệu ServBay.
- Tên:
Truy cập website chế độ phát triển
Mở trình duyệt và nhập domain vừa cấu hình:
https://servbay-express-test.servbay.demo
. Web server ServBay sẽ nhận request và chuyển tiếp qua reverse proxy đến ứng dụng Express.js tại cổng 8585. Trang sẽ hiển thị "Hello ServBay!".Nhờ hỗ trợ domain tùy chỉnh và SSL miễn phí (kể cả tự động HTTPS cho domain
.servbay.demo
), bạn có thể phát triển local với môi trường HTTPS sát thực tế sản xuất, qua đó dễ phát hiện vấn đề tiềm ẩn hơn.
Triển khai phiên bản production
Khi dự án Express.js đã hoàn thiện, bạn nên kiểm tra thử nghiệm phiên bản production tại local để đảm bảo mọi thứ chạy mượt.
Chuẩn bị môi trường production
Dự án Express.js trong môi trường production thường cần đặt biến môi trường
NODE_ENV=production
. Điều này ảnh hưởng các thư viện như tắt debug, tối ưu hiệu năng... Đảm bảo code dự án tương thích tốt khi biếnNODE_ENV
đổi sangproduction
.Chạy server production
Ở thư mục gốc dự án, chạy lệnh sau để khởi động server chế độ production với cổng mới (ví dụ
8586
) và đặtNODE_ENV
phù hợp.bashcd /Applications/ServBay/www/servbay-express-app PORT=8586 NODE_ENV=production npm start
1
2Terminal báo server lắng nghe ở cổng
8586
.Cấu hình reverse proxy website (production) trên ServBay
Làm tương tự như khi cấu hình cho môi trường phát triển, chỉ khác domain và cổng.
- Tên:
My first Express.js production site
- Tên miền:
servbay-express-test-prod.servbay.demo
(hoặc domain khác bạn muốn dùng) - Loại website: chọn
Reverse proxy
- IP:
127.0.0.1
- Cổng:
8586
(cổng production instance)
Lưu và áp dụng thay đổi.
- Tên:
Truy cập site production
Mở trình duyệt, nhập domain production bạn vừa cấu hình:
https://servbay-express-test-prod.servbay.demo
. Bạn sẽ truy cập được instance Express.js production chạy qua reverse proxy ở cổng 8586, từ đó kiểm thử các cài đặt khi chạy như thực tế.
Kết nối cơ sở dữ liệu
ServBay hỗ trợ nhiều gói phần mềm cơ sở dữ liệu cho môi trường phát triển như MariaDB, PostgreSQL, MongoDB, Redis. Nếu bạn đã bật các DB này trên ServBay, việc kết nối từ dự án Express.js rất dễ dàng. Thông thường ServBay có thiết lập tài khoản mặc định, ví dụ MariaDB/MySQL là user root
mật khẩu password
, PostgreSQL là user user
mật khẩu password
, database mặc định servbay_default
... Hãy kiểm tra thêm trong giao diện quản lý DB của ServBay.
Dưới đây là ví dụ kết nối tới những cơ sở dữ liệu thông dụng từ Express.js. Đảm bảo bạn đã cài đúng driver Node.js (ví dụ: npm install <package-name>
).
Kết nối MongoDB
Đầu tiên, cài driver mongoose:
bashnpm install mongoose
1Sau đó, import và kết nối vào code (có thể trong
app.js
hoặc file cấu hình DB riêng):javascriptvar mongoose = require('mongoose'); // Kết nối MongoDB local, database: servbay-express-app // Mặc định MongoDB của ServBay không yêu cầu xác thực mongoose.connect('mongodb://localhost/servbay-express-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Đã kết nối MongoDB')) .catch(err => console.error('Lỗi kết nối MongoDB:', err));
1
2
3
4
5
6
7
8
9
10Đảm bảo MongoDB đã chạy trong ServBay.
Kết nối Redis
Cài package client Redis:
bashnpm install redis
1Import và sử dụng trong project:
javascriptvar redis = require('redis'); // Mặc định Redis lắng nghe localhost:6379, không có mật khẩu var client = redis.createClient({ host: 'localhost', port: 6379 }); client.on('connect', function() { console.log('Đã kết nối Redis'); }); client.on('error', function (err) { console.log('Lỗi Redis: ' + err); }); // Ví dụ: set và get giá trị // client.set('mykey', 'Hello from Express!', redis.print); // client.get('mykey', function(err, reply) { // if (err) throw err; // console.log(reply); // In ra "Hello from Express!" // }); // Sử dụng đối tượng client để thao tác Redis khi cần
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23Đảm bảo Redis đã chạy trong ServBay.
Kết nối MariaDB / MySQL
ServBay hỗ trợ cả MariaDB lẫn MySQL, có thể dùng thư viện
mariadb
hoặcmysql2
. Ví dụ vớimariadb
(dùng được cả cho MySQL):Cài package:
bashnpm install mariadb # hoặc npm install mysql2
1Kết nối với tài khoản mặc định của ServBay (MariaDB/MySQL user
root
mật khẩupassword
):javascriptvar mariadb = require('mariadb'); // Mặc định MariaDB/MySQL lắng nghe localhost:3306 var pool = mariadb.createPool({ host: 'localhost', port: 3306, // Cổng mặc định user: 'root', // User mặc định ServBay password: 'password', // Mật khẩu mặc định database: 'servbay_express_app', // Tạo db này thông qua quản lý DB của ServBay connectionLimit: 5 // Số kết nối pool }); pool.getConnection() .then(conn => { console.log("Đã kết nối MariaDB/MySQL"); // Dùng đối tượng conn để query // conn.query("SELECT 1").then(...).catch(...).finally(() => conn.release()); conn.release(); // Nhả kết nối về pool }) .catch(err => { console.log("Không kết nối được: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Lưu ý bạn có thể cần tạo DB
servbay_express_app
trước (qua công cụ quản lý như phpMyAdmin, Adminer…). Đảm bảo MariaDB hoặc MySQL đã chạy trên ServBay.Kết nối PostgreSQL
Cài package client PostgreSQL:
bashnpm install pg
1Kết nối theo tài khoản mặc định ServBay (user
user
, mật khẩupassword
, dbservbay_default
):javascriptvar { Pool } = require('pg'); // PostgreSQL mặc định lắng nghe localhost:5432 var pool = new Pool({ user: 'user', // User mặc định ServBay host: 'localhost', database: 'servbay_default', // Hoặc database khác bạn đã tạo password: 'password', // Mật khẩu mặc định port: 5432, // Cổng mặc định }); pool.connect((err, client, done) => { if (err) { console.error('Lỗi kết nối PostgreSQL:', err); return; } console.log('Đã kết nối PostgreSQL'); // Dùng client để truy vấn // client.query('SELECT NOW()', (err, res) => { ... done(); }); done(); // Nhả kết nối }); // Hoặc sử dụng async/await // try { // const client = await pool.connect(); // console.log('Đã kết nối PostgreSQL'); // // const res = await client.query('SELECT NOW()'); // // console.log(res.rows[0]); // client.release(); // Nhả kết nối // } catch (err) { // console.error('Lỗi kết nối PostgreSQL:', err); // }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31Đảm bảo PostgreSQL đã chạy trong ServBay.
Tổng kết
Qua các bước trên, bạn đã biết cách sử dụng ServBay để tạo, cấu hình và chạy một dự án Express.js hoàn chỉnh, bao gồm:
- Khởi tạo dự án bằng
express-generator
- Chạy ứng dụng Express.js ở cổng tùy chỉnh
- Cấu hình reverse proxy với Website trên ServBay để truy cập bằng cổng web tiêu chuẩn
- Kết nối các cơ sở dữ liệu thông dụng trong môi trường phát triển mà ServBay cung cấp
ServBay giúp đơn giản hóa tối đa quá trình thiết lập, quản lý môi trường phát triển Node.js (Express.js) local, nhờ đó bạn tập trung tối đa cho code. Song song, các tính năng như tự động SSL certificate, backup website, xem log... cũng giúp workflow local của bạn tiện lợi, an toàn hơn.