Câu hỏi này kéo dài của What is Node.js' Connect, Express and "middleware"?Middleware mẫu thiết kế trong Node.js: Kết nối
Tôi đang đi con đường của học Javascript -> Node.js -> Connect -> Express -> ... để tìm hiểu về cách sử dụng ngăn xếp phát triển web hiện đại. Tôi có một nền tảng trong mạng lớp thấp, vì vậy việc bắt đầu và thực hiện với các mô-đun net
và http
của Node.js thật dễ dàng. Mô hình chung của việc sử dụng một máy chủ để định tuyến các yêu cầu đến các trình xử lý khác nhau có vẻ tự nhiên và trực quan.
Chuyển sang Kết nối, tôi e rằng mình không hiểu mô hình và luồng dữ liệu chung của "phần mềm trung gian" này. Ví dụ, nếu tôi tạo một số phần mềm trung gian để sử dụng với Connect ala;
// example.js
module.exports = function (opts) {
// ...
return function(req, res, next) {
// ...
next();
};
};
và "sử dụng" nó trong Kết nối qua
var example = require('./example');
// ...
var server = connect.createServer();
// ...
server.use(example(some_paramater));
Tôi không biết khi nào middleware của tôi được gọi. Ngoài ra, nếu tôi là use()
'trong các phần mềm middlware khác, tôi có thể được đảm bảo theo thứ tự mà phần mềm trung gian được gọi không? Ví dụ, tôi theo giả định hàm next()
được sử dụng để gọi tiếp theo (một lần nữa, làm thế nào để tôi thiết lập một thứ tự?) Middleware; tuy nhiên, không có tham số nào (req, res, next) được thông qua. Các thông số này có được truyền bằng cách nào đó không?
Tôi đoán rằng bộ sưu tập của module middleware sử dụng được kết hợp với nhau, bắt đầu với http
callback -> do đó một loạt các tính năng bổ sung trong giữa của callback yêu cầu ban đầu và máy chủ kết thúc một câu trả lời .
Tôi đang cố gắng hiểu mô hình phần mềm trung gian và luồng thông tin/thực thi.
Bất kỳ trợ giúp nào được đánh giá cao. Cảm ơn bạn đã đọc
Vì vậy, nếu tôi có 'var A = require ('./ A'), B = require ('./ B'); app.use (A()); app.use (B()); 'sau đó' A' sẽ đến trước 'B', với' A''s 'next' gọi' B'? Các thông số sau đó có được truyền ngầm không? Khác như thế nào 'B' truy cập' req, res, ect'? – gone
Chính xác. Các đối tượng 'req' và' res' đang di chuyển qua và là cùng một đối tượng trong tất cả chuỗi. Vì vậy, theo cách đó bạn có thể lưu một số dữ liệu trong đó, và sau đó sử dụng lại nó sau này trong một phần mềm trung gian khác dọc theo chuỗi. Đó là chính xác những gì xảy ra với hầu hết dữ liệu của bạn trong 'req'. Ví dụ theo dữ liệu POST mặc định không được phân tích cú pháp và phần tử trung gian 'express.bodyParser()' sẽ phân tích nó, và bạn có quyền truy cập vào nó sau này trong chuỗi. – moka
Tuyệt! Cảm ơn vì sự trả lời! – gone