Connect
Connect là một khung máy chủ HTTP có thể mở rộng cho node sử dụng “plugin” được gọi là middleware.
var connect = require('connect');
var http = require('http');
var app = connect();
// gzip/deflate outgoing responses
var compression = require('compression');
app.use(compression());
// store session state in browser cookie
var cookieSession = require('cookie-session');
app.use(cookieSession({
keys: ['secret1', 'secret2']
}));
// parse urlencoded request bodies into req.body
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));
// respond to all requests
app.use(function(req, res){
res.end('Hello from Connect!\n');
});
//create node.js http server and listen on port
http.createServer(app).listen(3000);
Bắt đầu
Connect là một khung làm việc đơn giản để kết nối các “middleware” khác nhau để xử lý các yêu cầu.
Cài đặt Connect
$ npm install connect
Tạo ứng dụng
Thành phần chính là một “ứng dụng” Connect. Điều này sẽ lưu trữ tất cả các middleware được thêm và là một hàm.
var app = connect();
Sử dụng middleware
Trái tim của Connect là việc “sử dụng” middleware. Middleware được thêm vào như một “ngăn xếp” nơi các yêu cầu đang đến sẽ thực thi từng middleware theo từng bước cho đến khi một middleware không gọi next()
bên trong nó.
app.use(function middleware1(req, res, next) {
// middleware 1
next();
});
app.use(function middleware2(req, res, next) {
// middleware 2
next();
});
Gắn kết middleware
Phương thức .use()
cũng có thể nhận một chuỗi đường dẫn tùy chọn được so sánh với phần đầu của URL yêu cầu đang đến. Điều này cho phép định tuyến cơ bản.
app.use('/foo', function fooMiddleware(req, res, next) {
// req.url starts with "/foo"
next();
});
app.use('/bar', function barMiddleware(req, res, next) {
// req.url starts with "/bar"
next();
});
Middleware xử lý lỗi
Có các trường hợp đặc biệt của middleware “xử lý lỗi”. Có middleware trong đó hàm nhận chính xác 4 đối số. Khi một middleware truyền một lỗi cho next
, ứng dụng sẽ tiếp tục tìm kiếm middleware xử lý lỗi đã được khai báo sau middleware đó và gọi nó, bỏ qua bất kỳ middleware xử lỗi nào ở trên middleware đó và bất kỳ middleware không phải là lỗi nào ở dưới.
// regular middleware
app.use(function (req, res, next) {
// i had an error
next(new Error('boom!'));
});
// error middleware for errors that occurred in middleware
// declared before this
app.use(function onerror(err, req, res, next) {
// an error occurred!
});
Tạo máy chủ từ ứng dụng
Bước cuối cùng là thực sự sử dụng ứng dụng Connect trong một máy chủ. Phương thức .listen()
là một tiện ích để bắt đầu một máy chủ HTTP (và hoàn toàn giống với phương thức listen
của http.Server
trong phiên bản Node.js bạn đang chạy).
var server = app.listen(port);
Ứng dụng chính thực sự chỉ là một hàm với ba đối số, vì vậy nó cũng có thể được truyền cho .createServer()
trong Node.js.
var server = http.createServer(app);
Middleware
Những middleware và thư viện này được hỗ trợ chính thức bởi nhóm Connect/Express:
- body-parser – trước đây là
bodyParser
,json
, vàurlencoded
. Bạn cũng có thể quan tâm đến: - body
- co-body
- raw-body
- compression – trước đây là
compress
- connect-timeout – trước đây là
timeout
- cookie-parser – trước đây là
cookieParser
- cookie-session – trước đây là
cookieSession
- csurf – trước đây là
csrf
- errorhandler – trước đây là
error-handler
- express-session – trước đây là
session
- method-override – trước đây là
method-override
- morgan – trước đây là
logger
- response-time – trước đây là
response-time
- serve-favicon – trước đây là
favicon
- serve-index – trước đây là
directory
- serve-static – trước đây là
static
- vhost – trước đây là
vhost
Hầu hết trong số này đều là phiên bản chính xác của các phiên bản Connect 2.x tương ứng. Trường hợp ngoại lệ chính là cookie-session
.
Một số middleware trước đây đã được bao gồm trong Connect không còn được hỗ trợ bởi nhóm Connect/Express, đã được thay thế bằng một mô-đun thay thế hoặc nên được thay thế bằng một mô-đun tốt hơn. Sử dụng một trong những mô-đun thay thế này thay vì:
cookieParser
- cookies và keygrip
limit
- raw-body
multipart
- connect-multiparty
- connect-busboy
query
- qs
staticCache
- st
- connect-static
Kiểm tra http-framework để biết thêm nhiều middleware tương thích khác!
API
API của Connect rất tối giản, đủ để tạo một ứng dụng và thêm một chuỗi middleware.
Khi mô-đun connect
được yêu cầu, một hàm được trả về để tạo một ứng dụng mới khi được gọi.
// require module
var connect = require('connect')
// create app
var app = connect()
app(req, res[, next])
app
chính là một hàm. Đây chỉ là một biệt danh của app.handle
.
app.handle(req, res[, out])
Gọi hàm này sẽ chạy ngăn xếp middleware đối với các đối tượng yêu cầu Node.js http (req
) và phản hồi (res
) được cung cấp. Một hàm tùy chọn out
có thể được cung cấp, nó sẽ được gọi nếu yêu cầu (hoặc lỗi) không được xử lý bởi ngăn xếp middleware.
app.listen([…])
Bắt đầu ứng dụng lắng nghe các yêu cầu. Phương thức này sẽ tạo một máy chủ HTTP Node.js bên trong và gọi .listen()
trên nó.
Đây là một biệt danh của phương thức server.listen()
trong phiên bản Node.js hiện đang chạy, vì vậy hãy tham khảo tài liệu Node.js để biết tất cả các biến thể khác nhau. Chữ ký phổ biến nhất là app.listen(port).
app.use(fn)
Sử dụng một hàm trên ứng dụng, trong đó hàm đại diện cho một middleware. Hàm sẽ được gọi cho mỗi yêu cầu theo thứ tự mà app.use
được gọi. Hàm được gọi với ba đối số:
app.use(function (req, res, next) {
// req is the Node.js http request object
// res is the Node.js http response object
// next is a function to call to invoke the next middleware
})
Ngoài một hàm thông thường, đối số fn
cũng có thể là một phiên bản máy chủ HTTP Node.js hoặc một phiên bản ứng dụng Connect khác.
app.use(route, fn)
Sử dụng một hàm trên ứng dụng, trong đó hàm đại diện cho một middleware. Hàm sẽ được gọi cho mỗi yêu cầu mà URL (req.url
property) bắt đầu bằng chuỗi route
đã cho trong thứ tự mà app.use
được gọi. Hàm được gọi với ba đối số:
app.use('/foo', function (req, res, next) {
// req is the Node.js http request object
// res is the Node.js http response object
// next is a function to call to invoke the next middleware
})
Ngoài một hàm thông thường, đối số fn
cũng có thể là một phiên bản máy chủ HTTP Node.js hoặc một phiên bản ứng dụng Connect khác.
Route
luôn kết thúc tại một ký tự phân cách đường dẫn (/
) hoặc một ký tự dấu chấm (.
). Điều này có nghĩa rằng các đường dẫn /foo/
và /foo
đều được coi là giống nhau và cả hai đều sẽ phù hợp với các yêu cầu có URL là /foo
, /foo/
, /foo/bar
, và /foo.bar
, nhưng không phù hợp với yêu cầu có URL là /foobar
.
Route
được phân biệt mà không phân biệt chữ hoa chữ thường.
Để làm cho việc viết middleware dễ dàng hơn mà không phụ thuộc vào route
, khi fn
được gọi, req.url
sẽ bị sửa đổi để loại bỏ phần route
(và bản gốc sẽ sẵn có dưới dạng req.originalUrl
). Ví dụ, nếu fn
được sử dụng tại route /foo
, yêu cầu cho /foo/bar
sẽ gọi fn
với req.url === '/bar'
và req.originalUrl === '/foo/bar'
.
Chạy Kiểm tra
npm install
npm test
Những Người
Dự án Connect sẽ không giống như vậy nếu không có sự tham gia của tất cả mọi người.
Tác giả gốc của Connect là TJ Holowaychuk
Người duy trì chính hiện tại là Douglas Christopher Wilson
Chi Tiết Tải về:
Tác giả: Senchalabs
Mã Nguồn: https://github.com/senchalabs/connect
Giấy Phép: MIT license