- vừa được xem lúc

Blog#31: How to Override the Express API - [Express Tutorial - Part 4/10] 😊 (Series: Bí kíp Javascript - PHẦN 26)

0 0 24

Người đăng: NGUYỄN ANH TUẤN

Theo Viblo Asia

Mình là TUẤN hiện đang là một Full-stack Developer tại Tokyo 😉. Nếu bạn thấy Blog này hay xin hãy cho mình một like và đăng ký để ủng hộ mình nhé 😊.

Overriding the Express API

Express API bao gồm các hàm và Properties khác nhau trên các đối tượng requestresponse. Chúng được kế thừa từ prototype. Có hai điểm cơ bản mà chúng ta có thể mở rộng cho API Express:

  1. Các prototype global tại express.requestexpress.response.
  2. Prototype dành riêng cho app tại app.requestapp.response.

Việc thay đổi các prototype chung sẽ ảnh hưởng đến tất cả các ứng dụng Express đã load trong cùng một quy trình. Nếu muốn, có thể thực hiện các thay đổi dành riêng cho ứng dụng bằng cách chỉ thay đổi các prototype dành riêng cho ứng dụng sau khi tạo ứng dụng mới.

Methods

Bạn có thể ghi đè chữ ký và hành vi của các hàm hiện có bằng của riêng bạn, bằng cách gán một hàm tùy chỉnh.

Sau đây là một ví dụ về ghi đè hành vi của res.sendStatus.

app.response.sendStatus = function (statusCode, type, message) { // code is intentionally kept simple for demonstration purpose return this.contentType(type) .status(statusCode) .send(message)
}

Việc thực hiện trên làm thay đổi hoàn toàn signature ban đầu của res.sendStatus. Bây giờ nó chấp nhận một status code, encoding typemessage sẽ được gửi đến client.

Hàm ghi đè hiện có thể được sử dụng theo cách này:

res.sendStatus(404, 'application/json', '{"error":"resource not found"}')

Properties

Các Properties trong API Express là:

  1. Properties được chỉ định (ví dụ: req.baseUrl, req.originalUrl)
  2. Được định nghĩa là getters (ví dụ: req.secure, req.ip)

Vì các Properties trong mục 1 được gán động (dynamically) trên các đối tượng requestresponse trong contexts của chu kỳ response-request hiện tại, nên không thể ghi đè hành vi của chúng.

Các Properties trong mục 2 có thể được ghi đè bằng cách sử dụng Express API extensions API.

Đoạn code sau đây viết lại cách value của req.ip được dẫn xuất (derived). Bây giờ, nó chỉ đơn giản trả về value Client-IP của headers request.

Object.defineProperty(app.request, 'ip', { configurable: true, enumerable: true, get () { return this.get('Client-IP') }
})

Prototype

Để tạo ra API Express.js, thì người ta đã tạo ra các request/response được truyền đến Express.js (ví dụ: thông qua app(req, res)) cần phải kế thừa từ cùng một chuỗi prototype. Theo mặc định sẽ là http.IncomingRequest.prototype dành cho requesthttp.ServerResponse.prototype dành cho response.

Trừ khi cần thiết, chúng ta khuyến nghị rằng điều này chỉ được thực hiện ở cấp ứng dụng (app), thay vì trên global.

// Use FakeRequest and FakeResponse in place of http.IncomingRequest and http.ServerResponse for the given app reference
Object.setPrototypeOf(Object.getPrototypeOf(app.request), FakeRequest.prototype)
Object.setPrototypeOf(Object.getPrototypeOf(app.response), FakeResponse.prototype)

Roundup

Như mọi khi, mình hy vọng bạn thích bài viết này và học thêm được điều gì đó mới.

Cảm ơn và hẹn gặp lại các bạn trong những bài viết tiếp theo! 😍

Nếu bạn thấy Blog này hay xin hãy cho mình một like và đăng ký để ủng hộ mình nhé. Thank you.😉

Ref

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tự build cho mình một hệ thống BADGE MARKDOWN siêu xịn xò - #1

Chào mọi người, lại là mình và cái serie "Something thú vị" của mình đây, serie tổng hợp những kiến thức mình cảm thấy thú vị ở trên google, github, bla bla... Qua đó chia sẻ những project nho nhỏ, thích hợp để mọi người làm cho vui hoặc relax hoặc giải trí. https://github.com/weebNeedWeed/custom-ba

0 0 32

- vừa được xem lúc

Node.js Tutorial: Phần 7 - Sử dụng EJS làm Template Engine trong Express

Tạo một project Express với express-generator. Cách nhanh nhất để tạo một project ExpressJS là sử dụng express-generator.

0 0 36

- vừa được xem lúc

File upload với Multer, Nodejs và Express

Khi một web client tải một tệp lên máy chủ, nó thường được gửi qua một biểu mẫu và được mã hóa dưới dạng dữ liệu multipart/form-data. Multer là một middleware cho Express và Nodejs giúp dễ dàng xử lý

0 0 110

- vừa được xem lúc

Bước đầu làm quen với NodeJS và Socket.io

Chào mọi người. Đôi điều chia sẻ trước khi đi vào nội dung chính của bài viết. Hôm nay là bài viết đầu tiên mình được viết trên Viblo.asia.

0 0 45

- vừa được xem lúc

CRUD với NodeJs, Express và MongoDB

1. Cài đặt môi trường. . B1: Tạo một thư mục dự án.

0 0 73

- vừa được xem lúc

Xây dựng app chat realtime với VueJS - NodeJS - Express - SocketIO

Mở đầu. Từ lâu mình đã ấp ủ tự mình làm được một app chat để chat với bạn bè.

0 0 138