Trước khi hiểu next
, bạn cần có một ý tưởng nhỏ về chu trình Yêu cầu-Phản hồi trong nút mặc dù không có nhiều chi tiết. Nó bắt đầu bằng việc bạn thực hiện một yêu cầu HTTP cho một tài nguyên cụ thể và nó kết thúc khi bạn gửi phản hồi lại cho người dùng tức là khi bạn gặp phải một cái gì đó như res.send ('Hello World');
Hãy xem một ví dụ rất đơn giản.
app.get('/hello', function (req, res, next) {
res.send('USER')
})
Ở đây chúng ta không cần next (), bởi vì resp.send sẽ kết thúc chu kỳ và bàn giao lại quyền điều khiển cho phần mềm trung gian tuyến.
Bây giờ hãy xem một ví dụ khác.
app.get('/hello', function (req, res, next) {
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Ở đây chúng ta có 2 hàm trung gian cho cùng một đường dẫn. Nhưng bạn sẽ luôn nhận được phản hồi từ người đầu tiên. Bởi vì điều đó được gắn đầu tiên trong ngăn xếp phần mềm trung gian và res.send sẽ kết thúc chu kỳ.
Nhưng nếu chúng ta luôn không muốn thế giới Hello Hello !!!! phản hồi lại. Đối với một số điều kiện, chúng tôi có thể muốn "Xin chào hành tinh !!!!" phản ứng. Hãy sửa đổi mã trên và xem điều gì sẽ xảy ra.
app.get('/hello', function (req, res, next) {
if(some condition){
next();
return;
}
res.send("Hello World !!!!");
});
app.get('/hello', function (req, res, next) {
res.send("Hello Planet !!!!");
});
Những gì next
đang làm ở đây. Và vâng, bạn có thể có những tiếng kêu. Nó sẽ bỏ qua chức năng phần mềm trung gian đầu tiên nếu điều kiện là đúng và gọi chức năng phần mềm trung gian tiếp theo và bạn sẽ có "Hello Planet !!!!"
phản hồi.
Vì vậy, tiếp theo chuyển điều khiển cho chức năng tiếp theo trong ngăn xếp phần mềm trung gian.
Điều gì sẽ xảy ra nếu chức năng phần mềm trung gian đầu tiên không gửi lại bất kỳ phản hồi nào nhưng thực hiện một đoạn logic và sau đó bạn nhận được phản hồi từ chức năng phần mềm trung gian thứ hai.
Một cái gì đó như dưới đây: -
app.get('/hello', function (req, res, next) {
// Your piece of logic
next();
});
app.get('/hello', function (req, res, next) {
res.send("Hello !!!!");
});
Trong trường hợp này, bạn cần cả hai hàm trung gian được gọi. Vì vậy, cách duy nhất bạn đạt được chức năng phần mềm trung gian thứ hai là bằng cách gọi next ();
Điều gì xảy ra nếu bạn không thực hiện cuộc gọi tiếp theo. Đừng mong đợi chức năng phần mềm trung gian thứ hai sẽ được gọi tự động. Sau khi gọi chức năng đầu tiên, yêu cầu của bạn sẽ bị treo. Hàm thứ hai sẽ không bao giờ được gọi và bạn sẽ không nhận được phản hồi.
res.send
để hoàn thành yêu cầu. Nếu nó không tồn tại, có khả năng một trình xử lý khác sẽ phát sinh lỗi và hoàn thành yêu cầu sau đó.