Mặc dù biết JavaScript khá rõ, tôi vẫn bối rối chính xác ba dự án trong hệ sinh thái Node.js này làm gì. Có phải cái gì đó giống như Rails 'Rack? Ai đó có thể vui lòng giải thích?
Mặc dù biết JavaScript khá rõ, tôi vẫn bối rối chính xác ba dự án trong hệ sinh thái Node.js này làm gì. Có phải cái gì đó giống như Rails 'Rack? Ai đó có thể vui lòng giải thích?
Câu trả lời:
[ Cập nhật: Kể từ phiên bản 4.0, Express không còn sử dụng Connect. Tuy nhiên, Express vẫn tương thích với phần mềm trung gian được viết cho Connect. Câu trả lời ban đầu của tôi là dưới đây.]
Tôi rất vui vì bạn đã hỏi về điều này, bởi vì đây chắc chắn là một điểm nhầm lẫn phổ biến đối với những người đang xem Node.js. Đây là cách tốt nhất của tôi để giải thích nó:
Bản thân Node.js cung cấp một mô-đun http , có createServer
phương thức trả về một đối tượng mà bạn có thể sử dụng để đáp ứng các yêu cầu HTTP. Đối tượng đó kế thừa http.Server
nguyên mẫu.
Connect cũng cung cấp một createServer
phương thức, trả về một đối tượng kế thừa phiên bản mở rộng của http.Server
. Các tiện ích mở rộng của Connect chủ yếu ở đó để giúp bạn dễ dàng cắm phần mềm trung gian . Đó là lý do Connect mô tả chính nó như là một "khung phần mềm trung gian" và thường được tương tự như Rack của Ruby.
Express thực hiện để Kết nối những gì Connect thực hiện với mô-đun http: Nó cung cấp một createServer
phương thức mở rộng Server
nguyên mẫu của Connect . Vì vậy, tất cả các chức năng của Connect đều có, cộng với hiển thị chế độ xem và DSL tiện dụng để mô tả các tuyến đường. Ruby's Sinatra là một sự tương tự tốt.
Sau đó, có các khung khác đi xa hơn và mở rộng Express! Ví dụ, Zappa , tích hợp hỗ trợ cho CoffeeScript, jQuery phía máy chủ và thử nghiệm.
Đây là một ví dụ cụ thể về ý nghĩa của "phần mềm trung gian": Trong số đó, không có phần nào ở trên phục vụ các tệp tĩnh cho bạn. Nhưng chỉ cần ném vào connect.static
(một phần mềm trung gian đi kèm với Kết nối), được định cấu hình để trỏ đến một thư mục và máy chủ của bạn sẽ cung cấp quyền truy cập vào các tệp trong thư mục đó. Lưu ý rằng Express cũng cung cấp phần mềm trung gian của Connect; express.static
cũng giống như connect.static
. (Cả hai đều được biết staticProvider
đến cho đến gần đây.)
Ấn tượng của tôi là hầu hết các ứng dụng Node.js "thực" đang được phát triển với Express ngày nay; các tính năng mà nó bổ sung là cực kỳ hữu ích và tất cả các chức năng cấp thấp hơn vẫn còn đó nếu bạn muốn.
Câu trả lời được chấp nhận là thực sự cũ (và bây giờ sai). Đây là thông tin (có nguồn) dựa trên phiên bản Kết nối hiện tại (3.0) / Express (4.0).
http / https createServer
chỉ đơn giản là thực hiện một cuộc gọi lại (req, res), vd
var server = http.createServer(function (request, response) {
// respond
response.write('hello client!');
response.end();
});
server.listen(3000);
Middleware về cơ bản là bất kỳ phần mềm nào nằm giữa mã ứng dụng của bạn và một số API cấp thấp. Connect mở rộng chức năng máy chủ HTTP tích hợp và thêm khung plugin. Các plugin hoạt động như phần mềm trung gian và do đó kết nối là một khung phần mềm trung gian
Cách thức thực hiện điều đó khá đơn giản ( và trên thực tế mã rất ngắn! ). Ngay sau khi bạn gọi, var connect = require('connect'); var app = connect();
bạn nhận được một chức năng app
có thể:
.use
( nguồn ) để quản lý các plugin ( xuất phát từ đây vì dòng mã đơn giản này ).Vì 1.) bạn có thể làm như sau:
var app = connect();
// Register with http
http.createServer(app)
.listen(3000);
Kết hợp với 2.) và bạn nhận được:
var connect = require('connect');
// Create a connect dispatcher
var app = connect()
// register a middleware
.use(function (req, res, next) { next(); });
// Register with http
http.createServer(app)
.listen(3000);
Connect cung cấp một chức năng tiện ích để tự đăng ký http
để bạn không cần thực hiện cuộc gọi http.createServer(app)
. Mã được gọi listen
và mã của nó chỉ đơn giản là tạo một máy chủ http mới, trình đăng ký kết nối dưới dạng gọi lại và chuyển tiếp các đối số tới http.listen
. Từ nguồn
app.listen = function(){
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
Vì vậy, bạn có thể làm:
var connect = require('connect');
// Create a connect dispatcher and register with http
var app = connect()
.listen(3000);
console.log('server running on port 3000');
Nó vẫn còn cũ của bạn http.createServer
với một khung plugin trên đầu trang.
ExpressJS và kết nối là các dự án song song. Connect chỉ là một khung công tác trung gian, với một use
chức năng tốt . Express không phụ thuộc vào Connect ( xem gói.json ). Tuy nhiên, nó thực hiện mọi thứ kết nối tức là:
createServer
like kết nối vì nó cũng chỉ là một chức năng có thể mất một req
/ res
cặp ( nguồn ).listen
chức năng tiện ích để tự đăng ký với httpNgoài những gì kết nối cung cấp (thể hiện sự trùng lặp), nó còn có một loạt các tính năng khác. ví dụ
Các use
chức năng của ExpressJS và kết nối tương thích và do đó middleware được chia sẻ . Cả hai đều là khung công tác trung gian, express chỉ có nhiều hơn một khung công tác trung gian đơn giản .
Ý kiến của tôi: bạn được thông báo đủ ^ dựa trên ^ để đưa ra lựa chọn của riêng bạn.
http.createServer
nếu bạn đang tạo một cái gì đó như kết nối / expressjs từ đầu.http.createServer
Hầu hết mọi người chỉ nên sử dụng ExpressJS.
Điều này có thể đúng như một số thời điểm, nhưng bây giờ sai:
kế thừa phiên bản mở rộng của http.Server
Sai lầm. Nó không mở rộng nó và như bạn đã thấy ... sử dụng nó
Express làm để kết nối những gì Connect làm với mô-đun http
Express 4.0 thậm chí không phụ thuộc vào kết nối. xem phần phụ thuộc pack.json hiện tại
Node.js là một công cụ javascript cho phía máy chủ.
Ngoài tất cả các khả năng của js, nó bao gồm các khả năng kết nối mạng (như HTTP) và truy cập vào hệ thống tệp.
Điều này khác với js phía máy khách nơi các tác vụ mạng được độc quyền bởi trình duyệt và việc truy cập vào hệ thống tệp bị cấm vì lý do bảo mật.
Một cái gì đó chạy trong máy chủ, hiểu HTTP và có thể truy cập các tệp âm thanh như một máy chủ web. Nhưng nó không phải là một.
Để làm cho node.js hoạt động giống như một máy chủ web, người ta phải lập trình nó: xử lý các yêu cầu HTTP đến và cung cấp các phản hồi thích hợp.
Đây là những gì Express làm: đó là việc triển khai máy chủ web trong js.
Do đó, việc triển khai một trang web cũng giống như cấu hình các tuyến Express và lập trình các tính năng cụ thể của trang web.
Phục vụ các trang liên quan đến một số nhiệm vụ. Nhiều trong số các tác vụ đó được biết đến và rất phổ biến, vì vậy mô-đun Connect của nút (một trong nhiều mô-đun có sẵn để chạy dưới nút) thực hiện các tác vụ đó.
Xem cung cấp ấn tượng hiện tại:
Kết nối là khung và thông qua nó, bạn có thể chọn các mô-đun (phụ) bạn cần.
Trang Contrib Middleware liệt kê một danh sách dài các phần mềm trung gian bổ sung .
Express tự đi kèm với các phần mềm trung gian Connect phổ biến nhất.
Cài đặt node.js.
Nút đi kèm với npm , trình quản lý gói nút .
Lệnh npm install -g express
sẽ tải xuống và cài đặt express trên toàn cầu (kiểm tra hướng dẫn cấp tốc ).
Chạy express foo
trong một dòng lệnh (không phải trong nút) sẽ tạo ra một ứng dụng sẵn sàng để chạy có tên foo. Thay đổi thư mục (mới được tạo) của nó và chạy nó với nút bằng lệnh node <appname>
, sau đó mở http://localhost:3000
và xem. Bây giờ bạn đang ở trong.
Node.js
chính nó cung cấp một mô-đun HTTP, có phương thức createServer trả về một đối tượng mà bạn có thể sử dụng để đáp ứng các yêu cầu HTTP. Đối tượng đó kế thừa http.Server
nguyên mẫu.
Thông tin liên quan, đặc biệt nếu bạn đang sử dụng NTVS để làm việc với Visual Studio IDE. NTVS bổ sung cả công cụ NodeJS và Express, giàn giáo, mẫu dự án vào Visual Studio 2012, 2013.
Ngoài ra, phiên bản gọi ExpressJS hoặc Connect là "Máy chủ web" là không chính xác. Bạn có thể tạo một Máy chủ Web cơ bản có hoặc không có chúng. Một chương trình NodeJS cơ bản cũng có thể sử dụng mô-đun http để xử lý các yêu cầu http, do đó trở thành một máy chủ web thô sơ.
phần mềm trung gian như tên cho thấy phần mềm trung gian thực sự nằm ở giữa .. giữa những gì? Giữa yêu cầu và phản hồi .. cách yêu cầu, phản hồi, máy chủ cấp tốc ngồi trong ứng dụng cấp tốc trong ảnh này bạn có thể thấy các yêu cầu đến từ máy khách sau đó máy chủ máy chủ cấp tốc phục vụ các yêu cầu đó .. sau đó hãy đào sâu hơn .. thực sự chúng ta có thể phân chia điều này toàn bộ nhiệm vụ của máy chủ thể hiện trong các nhiệm vụ riêng biệt nhỏ như cách này. Làm thế nào phần mềm trung gian ngồi giữa yêu cầu và phản hồi một phần nhỏ của các bộ phận máy chủ thực hiện một số nhiệm vụ cụ thể và chuyển yêu cầu đến phần tiếp theo .. cuối cùng thực hiện tất cả các phản hồi tác vụ đã được thực hiện .. tất cả các kho trung gian có thể truy cập đối tượng yêu cầu, đối tượng phản hồi và chức năng yêu cầu tiếp theo chu kỳ đáp ứng ..
đây là ví dụ điển hình để giải thích phần mềm trung gian trong video youtube thể hiện cho phần mềm trung gian