Thứ sáu, 21/06/2019 | 00:00 GMT+7

Tạo phần mềm trung gian Express.js của riêng bạn


Bạn có thấy mình lặp lại cùng một mã ở đầu trình xử lý tuyến Express.js không? Có lẽ bạn muốn ghi lại đường dẫn cho mỗi yêu cầu đến ứng dụng của bạn hoặc ngăn user thực hiện một thao tác nhất định. Đây là những ví dụ điển hình trong đó phần mềm trung gian Express.js tùy chỉnh sẽ thực hiện thủ thuật!

Phần mềm trung gian trong Express.js là một cách mạnh mẽ, thanh lịch để xử lý chức năng phổ biến trong các ứng dụng của bạn. Một số phần mềm trung gian phổ biến mà bạn có thể đã sử dụng là body-parser (được sử dụng để phân tích một phần thân yêu cầu JSON) và cors (cho phép hỗ trợ CORS cho ứng dụng của bạn). Các gói này cung cấp giá trị lớn và cực kỳ dễ cấu hình, một phần chủ yếu là do vẻ đẹp của hệ thống phần mềm trung gian của Express.js.

Bắt đầu

Tất nhiên, bạn cần phải cài đặt Node.js trước. Bạn có thể làm điều đó ở đây . Bạn cũng cần cài đặt ứng dụng Express.js. Bạn có thể làm theo tại đây để cài đặt .

Giải phẫu của một phần mềm trung gian Express

Phần mềm trung gian Express.js là các hàm có chữ ký sau:

function myCustomMiddleware(req, res, next) {
  // custom middleware here...
}

Tham số req ở đây là một đối tượng yêu cầu Express.js (tìm hiểu thêm về đối tượng yêu cầu Express.js tại đây ). Tham số res là một đối tượng phản hồi Express.js (tìm hiểu thêm về đối tượng phản hồi Express.js tại đây ). Cuối cùng, tham số next là một hàm thông báo cho Express.js tiếp tục chuyển sang phần mềm trung gian tiếp theo mà bạn đã cấu hình cho ứng dụng của bạn .

Phần mềm trung gian có khả năng sửa đổi các đối tượng req hoặc res , chạy bất kỳ mã nào bạn muốn, kết thúc chu trình phản hồi yêu cầu và gọi phần mềm trung gian tiếp theo trong ngăn xếp. Do phong cách "chuỗi" của ngăn xếp phần mềm trung gian trong Express.js, nơi mỗi phần mềm trung gian tiếp tục được yêu cầu gọi next() trước khi tiếp tục, thứ tự mà phần mềm trung gian được thêm vào là điều quan trọng nhất.

Sửa đổi req Object

Giả sử bạn muốn xác định user hiện đang đăng nhập theo mọi yêu cầu. Bạn có thể viết một phần mềm trung gian để tìm nạp user (tra cứu user sẽ phụ thuộc phần lớn vào phương pháp xác thực của bạn) giống như sau:

middleware / setCurrentUser.js
// getUserFromToken would be based on your authentication strategy
const getUserFromToken = require("../getUserFromToken");

module.exports = function setCurrentUser(req, res, next) {
  // grab authentication token from req header
  const token = req.header("authorization");

  // look up the user based on the token
  const user = getUserFromToken(token).then(user => {
    // append the user object the the request object
    req.user = user;

    // call next middleware in the stack
    next();
  });
};

Khi bạn đã có phần mềm trung gian mới sáng bóng sẵn sàng hoạt động, bạn cần thêm nó vào ứng dụng của bạn . Điều này có thể được thực hiện khá đơn giản bằng cách "sử dụng" phần mềm trung gian, như vậy, phần mềm trung gian cho phép tất cả các tuyến trong ứng dụng của bạn:

server.js
const express = require('express');
const setCurrentUser = require('./middleware/setCurrentUser.js');

const app = express();

app.use(setCurrentUser);

// ...

Sửa đổi đối tượng res

Giả sử bạn muốn luôn đặt tiêu đề tùy chỉnh trên đối tượng phản hồi của bạn . Điều này có thể dễ dàng đạt được thông qua một phần mềm trung gian như vậy:

middleware / addGatorHeader.js
module.exports = function addGatorHeader(req, res, next) {
  res.setHeader("X-Gator-Policy", "chomp-chomp");
  next();
};

Kết thúc chu kỳ yêu cầu / phản hồi

Một trường hợp sử dụng phổ biến cho phần mềm trung gian là xác thực rằng đối tượng user đã được đặt trên đối tượng req của bạn. Bạn có thể thực hiện việc kiểm tra này và nếu không tìm thấy user , hãy chấm dứt chu kỳ yêu cầu / phản hồi, trả lại phản hồi được ủy quyền. Dưới đây là một ví dụ đơn giản về cách tiếp cận này:

middleware / isLoggedIn.js
module.exports = function isLoggedIn(req, res, next) {
  if (req.user) {
    // user is authenticated
    next();
  } else {
    // return unauthorized
    res.send(401, "Unauthorized");
  }
};

Khi bạn đã triển khai phần mềm trung gian này, bạn cần thêm nó vào ngăn xếp phần mềm trung gian của ứng dụng. Đặt hàng là rất quan trọng ở đây! Ta sẽ kết hợp ví dụ trước đó của ta về việc cài đặt user thông qua phần mềm trung gian setCurrentUser và sau đó áp dụng phần mềm trung gian mới của ta . Ngoài ra, ta sẽ chỉ yêu cầu xác thực user khi sử dụng một tuyến đường duy nhất, thay vì trên toàn ứng dụng.

server.js
const express = require("express");

const setCurrentUser = require("./middleware/setCurrentUser.js");
const isLoggedIn = require("./middleware/isLoggedIn.js");

const app = express();

app.use(setCurrentUser);

app.get("/users", isLoggedIn, function(req, res) {
  // get users...
});

Với ví dụ này, chỉ có đường dẫn /users sẽ yêu cầu xác thực user .

Kết luận

Với những chức năng đơn giản này, ta có thể đóng gói logic ứng dụng được dùng lại và dễ lý luận hơn.

Để đọc thêm về cách viết phần mềm trung gian Express.js tùy chỉnh, hãy xem tài liệu chính thức .


Tags:

Các tin liên quan