Tôi thấy rất nhiều sử dụng next
trong node.js.
Nó là gì, nó đến từ đâu? Nó làm gì? Tôi có thể sử dụng nó phía khách hàng không?
Xin lỗi, nó được sử dụng ví dụ ở đây: http://dailyjs.com/2010/12/06/node-tutorial-5/
tìm kiếm hàm loadUser.
Tôi thấy rất nhiều sử dụng next
trong node.js.
Nó là gì, nó đến từ đâu? Nó làm gì? Tôi có thể sử dụng nó phía khách hàng không?
Xin lỗi, nó được sử dụng ví dụ ở đây: http://dailyjs.com/2010/12/06/node-tutorial-5/
tìm kiếm hàm loadUser.
Câu trả lời:
Đây dường như là một quy ước đặt tên biến trong mã luồng điều khiển Node.js, trong đó một tham chiếu đến hàm tiếp theo để thực thi được đưa ra cho một cuộc gọi lại để nó khởi động khi nó hoàn thành.
Xem, ví dụ, các mẫu mã ở đây:
Hãy xem ví dụ bạn đã đăng:
function loadUser(req, res, next) {
if (req.session.user_id) {
User.findById(req.session.user_id, function(user) {
if (user) {
req.currentUser = user;
return next();
} else {
res.redirect('/sessions/new');
}
});
} else {
res.redirect('/sessions/new');
}
}
app.get('/documents.:format?', loadUser, function(req, res) {
// ...
});
Các loadUser
chức năng hy vọng một hàm trong lập luận thứ ba, đó là ràng buộc để tên next
. Đây là một tham số chức năng bình thường. Nó giữ một tham chiếu đến hành động tiếp theo để thực hiện và được gọi một lần loadUser
được thực hiện (trừ khi không thể tìm thấy người dùng).
Không có gì đặc biệt về tên next
trong ví dụ này; chúng tôi có thể đặt tên cho nó bất cứ điều gì.
.next()
. Anh ta dường như hỏi về next
một phương pháp trên một đối tượng.
return next();
return callback()
thay vìreturn next()
Đó là quy ước đặt tên được sử dụng khi chuyển các cuộc gọi lại trong các tình huống yêu cầu thực hiện các hành động nối tiếp, ví dụ thư mục quét -> đọc dữ liệu tệp -> làm gì đó với dữ liệu. Đây là ưu tiên để lồng sâu các cuộc gọi lại. Ba phần đầu tiên của bài viết sau đây trên blog HowToNode của Tim Caswell cung cấp một cái nhìn tổng quan tốt về điều này:
http://howtonode.org/control-flow
Đồng thời xem phần Hành động tuần tự của phần thứ hai của bài đăng đó:
Về cơ bản, nó giống như một cuộc gọi lại mà express.js sử dụng sau khi một phần nhất định của mã được thực thi và thực hiện, bạn có thể sử dụng nó để đảm bảo rằng một phần của mã đã được thực hiện và những gì bạn muốn làm tiếp theo, nhưng hãy luôn chú ý bạn chỉ có thể làm một res.send
trong mỗi khối REST của bạn ...
Vì vậy, bạn có thể làm một cái gì đó như thế này như một next()
ví dụ đơn giản :
app.get("/", (req, res, next) => {
console.log("req:", req, "res:", res);
res.send(["data": "whatever"]);
next();
},(req, res) =>
console.log("it's all done!");
);
Nó cũng rất hữu ích khi bạn muốn có một phần mềm trung gian trong ứng dụng của mình ...
Để tải chức năng phần mềm trung gian, hãy gọi app.use (), chỉ định chức năng phần mềm trung gian. Ví dụ: đoạn mã sau tải chức năng phần mềm trung gian myLogger trước khi định tuyến đến đường dẫn gốc (/).
var express = require('express');
var app = express();
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
}
app.use(myLogger);
app.get('/', function (req, res) {
res.send('Hello World!');
})
app.listen(3000);