Chuyển đến nội dung chính

MIDDLEWARE trong EXPRESS


Middleware là phần mềm máy tính với nhiệm vụ kết nối các phần mềm hoặc các ứng dụng với nhau.
                                              
Express là một web framework định hướng và là phần trung gian với tính năng cơ bản nhất của nó.
Phần trung gian (middleware- tôi tạm dịch như vậy) là một tính năng với các truy cập đến các đối tượng yêu cầu (req), các đối tượng trả lời (res) và các phần trung gian tiếp theo trong vòng lặp req-res của ứng dụng.
- Middleware có thể:
-          - Thực thi một đoạn code
-          - Thay đồi những đối tượng req và res
-         -  Kết thục vòng req-res.
-         -  Gọi các phần trung gian tiếp theo.

Nếu hiện tại không kết thúc phần trung gian trong vòng lặp, nó phải gọi next() để chuyển đến phần trung gian tiếp theo, nếu không thì req sẽ bị treo.
Một ứng dụng express có thể sử dụng những phần trung gian sau:
-       -    Phần trung gian mức ứng dụng.
-       -   Phần trung gian mức định tuyến
-       -   Phần trung gian điểu khiển lỗi
-         - Phần trung gian xây dựng sẵn
-         - Phần trung gian của các bên thứ 3

 Phần trung gian mức ứng dụng:
-       Kết nối phần trung gian mức ứng dụng đến một instance của một ứng dụng đối tượng với app.use() và app.METHOD() là các phương thức HTTP ,… như ví dụ dưới:
-       var app = express();
-        
-       // a middleware with no mount path; gets executed for every request to the app
-       app.use(function (req, res, next) {
-         console.log('Time:', Date.now());
-         next();
-       });
-        
-       // a middleware mounted on /user/:id; will be executed for any type of HTTP request to /user/:id
-       app.use('/user/:id', function (req, res, next) {
-         console.log('Request Type:', req.method);
-         next();
-       });
-        
-       // a route and its handler function (middleware system) which handles GET requests to /user/:id
-       app.get('/user/:id', function (req, res, next) {
-         res.send('USER');
-       });
Dưới đây là một ví dụ load 1 vài middleware tại điểm mount, và đường dẫn đến mount point đó.
// a middleware sub-stack which prints request info for any type of HTTP request to /user/:id
app.use('/user/:id', function(req, res, next) {
  console.log('Request URL:', req.originalUrl);
  next();
}, function (req, res, next) {
  console.log('Request Type:', req.method);
  next();
});

 Ví dụ:
// a middleware sub-stack which handles GET requests to /user/:id
app.get('/user/:id', function (req, res, next) {
  console.log('ID:', req.params.id);
  next();
}, function (req, res, next) {
  res.send('User Info');
});
 
// handler for /user/:id which prints the user id
app.get('/user/:id', function (req, res, next) {
  res.end(req.params.id);
});
Vì dụ trên định nghĩa 2 request GET đến /user/:id . Res thứ 2 không có lỗi gì cả nhưng nó sẽ không bao giờ được gọi bởi vì định hướng kết thúc đầu tiên xảy ra trong vòng lặp.
// a middleware sub-stack which handles GET requests to /user/:id
app.get('/user/:id', function (req, res, next) {
  // if user id is 0, skip to the next route
  if (req.params.id == 0) next('route');
  // else pass the control to the next middleware in this stack
  else next(); //
}, function (req, res, next) {
  // render a regular page
  res.render('regular');
});
 
// handler for /user/:id which renders a special page
app.get('/user/:id', function (req, res, next) {
  res.render('special');
});
Phần trung gian mức định hướng.
Phần trung gian định hướng làm việc giống như phần trung gian mức ứng dụng ngoại trừ:
Var router = express.Router()
Ví dụ dưới sau :
var app = express();
var router = express.Router();
 
// a middleware with no mount path, gets executed for every request to the router
router.use(function (req, res, next) {
  console.log('Time:', Date.now());
  next();
});
 
// a middleware sub-stack shows request info for any type of HTTP request to /user/:id
router.use('/user/:id', function(req, res, next) {
  console.log('Request URL:', req.originalUrl);
  next();
}, function (req, res, next) {
  console.log('Request Type:', req.method);
  next();
});
 
// a middleware sub-stack which handles GET requests to /user/:id
router.get('/user/:id', function (req, res, next) {
  // if user id is 0, skip to the next router
  if (req.params.id == 0) next('route');
  // else pass the control to the next middleware in this stack
  else next(); //
}, function (req, res, next) {
  // render a regular page
  res.render('regular');
});
 
// handler for /user/:id which renders a special page
router.get('/user/:id', function (req, res, next) {
  console.log(req.params.id);
  res.render('special');
});
 
// mount the router on the app
app.use('/', router);
Phần trung gian điều khiển lỗi:
app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});
Phần này có 4 agurments thay vì 3 như các middleware khác.
Phần trung gian xây dựng sẵn:
Ví dụ:
var options = {
  dotfiles: 'ignore',
  etag: false,
  extensions: ['htm', 'html'],
  index: false,
  maxAge: '1d',
  redirect: false,
  setHeaders: function (res, path, stat) {
    res.set('x-timestamp', Date.now());
  }
}
 
app.use(express.static('public', options));
 bạn có thể có nhiều hơn 1 thư mục tĩnh cho 1 app của bạn:
app.use(express.static('public'));
app.use(express.static('uploads'));
app.use(express.static('files'));
Phần trung gian của party thứ 3.
Ví dụ:
$npm install cookie-parser

var app = express();
var cookieParser = require('cookie-parser');
 
// load the cookie parsing middleware
app.use(cookieParser());



Nhận xét

Bài đăng phổ biến từ blog này

Cách sử dụng sys.argv trong python.

Cách sử dụng sys.argv trong python.

sys.argv là môt danh sách [list] trong python, nó được sư dụng khi bạn chạy một lệnh command-line nào đó trên hệ thống.
Và argument này được đẩy vào script python để thực thi khi chạy câu lệnh.

Ví dụ: python sys.argv arg1 arg2

Trước tiên bạn phải import mô đun sys trong script.



import sys print"This is the name of the script: ", sys.argv[0]print"Number of arguments: ", len(sys.argv)print"The arguments are: ", str(sys.argv)

Tên của script này : sysargv.py
Số lượng arg là : 1
Arg là : ['sysargv.py']


python test1020.py 111 This is the name of the script:  test1020.py
Number of arguments:  2
The arguments are:  ['test1020.py', '111']

Thiết kế một RESTful API bằng python và flask.

Như các bạn đã biết thì REST viết tắt bởi REpresentational State Transfer. Bạn có thể tham khảo thêm ở đây.

Vậy REST là gì:

Có 6 yếu tố của REST như sau:

1. Client-Server: phía server side phục vụ như một service còn phía client sẽ dùng service này.

2.Stateless:  Mỗi request từ client phải chứa tất cả các thông tin mà phía server yêu cầu phải có. Nói nôm na là mỗi request chứa các thông tin riêng rẽ không liên quan đến những request khác.

3. Cacheable : Phía server side phải cảnh báo chỉ ra cho client side biết là request đó có cache hay không.

4. Hệ thống phân lớp: Giao tiếp giữa server side và client side có thể thông qua lớp trung gian ở giữa để trả lời các request được gọi mà không cân phía client phải làm những động tác khác nữa.

5. Các cổng giao tiếp là giống nhau : Các phương thức giao tiếp giữa client và server là khuôn mẫu giống nhau.

6. Mã code linh động. Phía server có thể thực thi cho môt API gọi duy nhất mà không ảnh hưởng tới các API khác.

RESTful web service là gì :

Kiế…

Cài đặt docker trên windows server 2016.

1. Cài đặt Windows Server 2016 Container Feature:  Mở PowerShell : Cài đặt các container feature dùng powershell: Dùng lệnh: InstallWindowsFeature containers Restart lại windows: 2. Cài đặt windows server 2016 base image:  Cài đặt mô đun : ContainerImage Dùng lệnh: Install-PackageProvider ContainerImage -force List các image có giá trị: Cài đặt Windows Server Core : 3. Cài đặt docker trên windows server 2016. Download script để cài đặt docker : Chạy script : Kiểm tra các image có trên server :