Widzę wiele zastosowań next
w node.js.
Co to jest, skąd się bierze? Co to robi? Czy mogę go używać po stronie klienta?
Przepraszamy, jest używany na przykład tutaj: http://dailyjs.com/2010/12/06/node-tutorial-5/
poszukaj funkcji loadUser.
Widzę wiele zastosowań next
w node.js.
Co to jest, skąd się bierze? Co to robi? Czy mogę go używać po stronie klienta?
Przepraszamy, jest używany na przykład tutaj: http://dailyjs.com/2010/12/06/node-tutorial-5/
poszukaj funkcji loadUser.
Odpowiedzi:
Wydaje się, że jest to konwencja nazewnictwa zmiennych w kodzie przepływu sterowania Node.js, w której odwołanie do następnej funkcji do wykonania jest przekazywane do wywołania zwrotnego, aby mógł on zacząć działać po zakończeniu.
Zobacz na przykład przykłady kodu tutaj:
Spójrzmy na przykład, który opublikowałeś:
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) {
// ...
});
loadUser
Funkcja oczekuje funkcję w swoim trzecim argumencie, który jest związany z nazwą next
. To jest normalny parametr funkcji. Zawiera odniesienie do następnej akcji do wykonania i jest wywoływana po jej loadUser
wykonaniu (chyba że nie można znaleźć użytkownika).
W next
tym przykładzie nie ma nic specjalnego w nazwie ; moglibyśmy to nazwać cokolwiek.
.next()
. Wydaje się, że pyta o next
metodę na obiekcie.
return next();
return callback()
zamiastreturn next()
Jest to konwencja nazewnictwa stosowana przy przekazywaniu wywołań zwrotnych w sytuacjach wymagających seryjnego wykonania akcji, np. Skanowanie katalogu -> odczyt danych pliku -> zrobienie czegoś z danymi. Jest to preferowane do głębokiego zagnieżdżania wywołań zwrotnych. Pierwsze trzy części następującego artykułu na blogu Tima Caswella HowToNode dają dobry przegląd tego:
http://howtonode.org/control-flow
Zobacz także sekcję Działania sekwencyjne w drugiej części tego ogłoszenia:
Jest to w zasadzie jak wywołanie zwrotne, którego używa express.js po wykonaniu i zakończeniu określonej części kodu.Możesz go użyć, aby upewnić się, że część kodu została wykonana i co chcesz zrobić dalej, ale zawsze pamiętaj, że możesz zrób po jednym res.send
w każdym bloku REST ...
Możesz więc zrobić coś takiego jako prosty next()
przykład:
app.get("/", (req, res, next) => {
console.log("req:", req, "res:", res);
res.send(["data": "whatever"]);
next();
},(req, res) =>
console.log("it's all done!");
);
Jest to również bardzo przydatne, gdy chcesz mieć oprogramowanie pośredniczące w swojej aplikacji ...
Aby załadować funkcję oprogramowania pośredniego, wywołaj app.use (), określając funkcję oprogramowania pośredniego. Na przykład poniższy kod ładuje funkcję oprogramowania pośredniego myLogger przed trasą do ścieżki głównej (/).
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);