Feathers.js là một trong những thư viện JavaScript mạnh mẽ giúp xây dựng các ứng dụng thời gian thực và REST API nhanh chóng và hiệu quả. Với khả năng tích hợp dễ dàng và mạnh mẽ, Feathers.js phù hợp cho cả các lập trình viên mới lẫn những người có kinh nghiệm. Bài viết này sẽ hướng dẫn bạn cách cài đặt Feathers.js trong JavaScript từ cách thiết lập môi trường, cài đặt thư viện cho đến việc tạo một ứng dụng mẫu để thể hiện các khả năng của nó.
Giới Thiệu Về Feathers.js
Feathers.js Là Gì?
Feathers.js là một framework dành cho Node.js, giúp xây dựng các API RESTful và thời gian thực dễ dàng. Nó hỗ trợ tích hợp mượt mà với các cơ sở dữ liệu khác nhau như MongoDB, MySQL, SQLite và các giao thức như REST, WebSockets.
Tại Sao Chọn Feathers.js?
- Nhanh chóng và hiệu quả: Feathers cho phép bạn tập trung vào việc phát triển các chức năng cốt lõi mà không cần viết nhiều mã lặp lại.
- Thời gian thực: Hỗ trợ WebSocket và REST API cùng lúc, giúp các ứng dụng có khả năng phản hồi tức thì.
- Modular: Cấu trúc plug-and-play để bạn có thể thêm hoặc lược bỏ các tính năng tùy theo nhu cầu.
- Dễ dàng tích hợp: Hỗ trợ nhiều cơ sở dữ liệu, xác thực và quản lý quyền người dùng linh hoạt.
Yêu Cầu Hệ Thống
Trước khi bắt đầu, đảm bảo rằng bạn đã cài đặt các công cụ cần thiết:
- Node.js: Feathers.js yêu cầu phiên bản Node.js >= 10.
- npm: Thông thường sẽ đi kèm với Node.js.
Cài Đặt Feathers CLI
Bước 1: Cài Đặt Feathers CLI Toàn Cục
Feathers CLI là công cụ dòng lệnh giúp bạn tạo và quản lý các dự án Feathers.js dễ dàng. Cài đặt Feathers CLI bằng npm với lệnh sau:
npm install -g @feathersjs/cli
Bước 2: Tạo Mới Dự Án Feathers
Sử dụng Feathers CLI để tạo một dự án Feathers.js mới:
feathers generate app
Hệ thống sẽ đưa ra các câu hỏi để thiết lập dự án của bạn, ví dụ tên dự án, loại dự án (REST API + Real-time API), cấu trúc thư mục, cơ sở dữ liệu, v.v.
Cài Đặt Các Phụ Thuộc Cần Thiết
Sau khi tạo dự án, di chuyển vào thư mục dự án và cài đặt các phụ thuộc cần thiết:
cd your-project-name
npm install
Cấu Trúc Thư Mục Của Dự Án Feathers.js
Khi bạn tạo mới một dự án Feathers, bạn sẽ thấy cấu trúc thư mục được tạo ra như sau:
my-feathers-app/
├── public/
├── src/
│ ├── hooks/
│ ├── middleware/
│ ├── models/
│ ├── services/
│ ├── app.js
│ ├── channels.js
│ ├── index.js
│ ├── logger.js
│ ├── sequelize.js
│ ├── app.hooks.js
│ └── app.service.js
├── test/
├── config/
│ ├── default.json
│ └── production.json
├── .gitignore
├── package.json
└── README.md
Giải Thích Một Số Thư Mục và Tệp Tin
- public/: Nơi chứa các tập tin tĩnh như HTML, CSS, JS sẽ được phục vụ bởi server.
- src/: Nơi chứa mã nguồn chính của ứng dụng.
- hooks/: Chứa logic hooks để xử lý các sự kiện trước hoặc sau khi thực hiện service.
- middleware/: Chứa các middleware sẽ được áp dụng cho tất cả các yêu cầu.
- models/: Chứa các mô hình dữ liệu nếu bạn sử dụng ORM.
- services/: Chứa các service cung cấp chức năng REST và thời gian thực.
- app.js: Tệp cấu hình chính của ứng dụng.
- channels.js: Định nghĩa các kênh thời gian thực.
- index.js: Điểm vào chính của ứng dụng.
- logger.js: Cấu hình cho việc log.
- sequelize.js: Cấu hình cho sequelize ORM (nếu sử dụng).
- app.hooks.js: Chứa các hooks chung cho ứng dụng.
- app.service.js: Khởi tạo và đăng ký các service cho ứng dụng.
- test/: Thư mục chứa các tệp kiểm thử.
Cấu Hình Dự Án
Feathers.js sử dụng tệp JSON để lưu cấu hình. Tệp config/default.json chứa cấu hình mặc định:
{
"host": "localhost",
"port": 3030,
"public": "./public/",
"paginate": {
"default": 10,
"max": 50
}
}
Bạn có thể thay đổi cấu hình tùy theo nhu cầu của dự án.
Thêm Service Mới
Bước 1: Tạo Service
Sử dụng Feathers CLI để tạo một service mới. Trong ví dụ này, chúng ta sẽ tạo một service để quản lý người dùng:
feathers generate service
CLI sẽ yêu cầu tên của service, loại của service (class, adapter, sequelize, memory, v.v.), và các tùy chọn khác. Ví dụ:
- Tên service:
users - Loại:
memory
Bước 2: Cấu Hình Service
Sau khi tạo service, tệp cấu hình sẽ được tạo trong src/services/users/users.service.js:
const { Users } = require('./users.class');
const createModel = require('../../models/users.model');
const hooks = require('./users.hooks');
module.exports = function (app) {
const options = {
Model: createModel(app),
paginate: app.get('paginate')
};
app.use('/users', new Users(options, app));
const service = app.service('users');
service.hooks(hooks);
};
Bước 3: Định Nghĩa Mô Hình (Nếu Cần)
Nếu sử dụng ORM như Sequelize, bạn cần định nghĩa mô hình của mình trong src/models/users.model.js:
const Sequelize = require('sequelize');
module.exports = function (app) {
const sequelizeClient = app.get('sequelizeClient');
const users = sequelizeClient.define('users', {
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true
},
password: {
type: Sequelize.STRING,
allowNull: false
}
}, {
hooks: {
beforeCount(options) {
options.raw = true;
}
}
});
return users;
};
Bước 4: Thêm Hooks (Nếu Cần)
Hooks là cách để bạn thêm logic vào trước hoặc sau khi thực hiện các action trong service. Ví dụ bạn có thể thêm xác thực và phân quyền trong src/services/users/users.hooks.js:
module.exports = {
before: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},
after: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
};
Tích Hợp Middleware
Middleware là các hàm trung gian được thực hiện trước hoặc sau khi request đến các route hoặc service. Bạn có thể thêm các middleware trong src/middleware/:
Thêm Middleware Ví Dụ
// src/middleware/log-request.js
module.exports = function (req, res, next) {
console.log(`${req.method} ${req.url}`);
next();
};
Đăng Ký Middleware
Đăng ký các middleware trong src/app.js:
const logRequest = require('./middleware/log-request');
app.use(logRequest);
Bảo Mật Và Xác Thực
Feathers.js cung cấp một plugin mạnh mẽ cho việc xác thực và bảo mật, tên là @feathersjs/authentication.
Cài Đặt Plugin
Cài đặt plugin và các phụ thuộc liên quan:
npm install @feathersjs/authentication @feathersjs/authentication-local
Cấu Hình Xác Thực
Cấu hình xác thực trong src/authentication.js:
const { AuthenticationService, JWTStrategy } = require('@feathersjs/authentication');
const { LocalStrategy } = require('@feathersjs/authentication-local');
module.exports = function (app) {
const authentication = new AuthenticationService(app);
authentication.register('jwt', new JWTStrategy());
authentication.register('local', new LocalStrategy());
app.use('/authentication', authentication);
};
Thêm Hooks Xác Thực
Thêm các hooks xác thực vào service trong src/services/users/users.hooks.js:
const { authenticate } = require('@feathersjs/authentication').hooks;
module.exports = {
before: {
all: [authenticate('jwt')],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},
after: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
};
Kết Luận
Feathers.js là một framework mạnh mẽ và dễ sử dụng giúp bạn xây dựng các ứng dụng RESTful và thời gian thực nhanh chóng. Với cấu trúc modular và dễ dàng tích hợp với các dịch vụ và cơ sở dữ liệu khác, Feathers.js chắc chắn là một lựa chọn tốt cho các dự án của bạn. Hy vọng qua bài viết này, bạn đã nắm được cách cài đặt và cấu hình Feathers.js trong JavaScript cũng như cách thêm các service, middleware và xác thực cho ứng dụng của bạn. Chúc bạn thành công với các dự án của mình!
Comments