Ich versuche, eine curried Fn mit einer Schließung als Rückruf zu den Servern request event zu verwenden.Wie funktioniert der Rückruf zum Server "Anfrage-Event" in node.js?
Es funktioniert das erste Mal, wenn ein Client eine Anfrage (das HTML wird gesendet und angezeigt), aber das zweite Mal, dass die Seite leer ist. Löscht Knoten den Abschluss nach dem ersten Aufruf des cb?
// server.js
var pype = function(self, arr, errorHandler, cb) {
var i = 0,
req,
res,
run = function() {
arr[i].call(self, req, res, next);
},
next = function(err) {
if (err && errorHandler) {
return errorHandler.call(self, err, req, res);
}
i++
if (i < arr.length) {
return run();
} else if (cb) {
return cb.call(self, req, res);
}
}
return function(request, response) {
req = request;
res = response;
run();
}
};
var http = require("http”);
var server = http.createServer();
var errorhandler = function(err, req, res) {
res.end(err);
},
var finalHandler = function(req, res) {
res.setHeader("Content-Type", "text/html");
res.end(req.html);
};
var requestHandler = pype(null, [pens, gits, concat, index, sort, html, finalHandler], errorhandler);
// this works only once
server.on('request', requestHandler);
// this works for multiple calls
server.on('request', function(req, res){
var requestHandler = pype(null, [pens, gits, concat, index, sort, html, finalHandler], errorhandler);
requestHandler(req, res);
});
Vielen Dank!
einen besonderen Grund, warum Sie nicht nur 'Lauf machen()' 'akzeptieren request' und' response'? Sich zu sehr auf Schließung zu verlassen, macht unlesbaren Code. –
@MadaraUchiha Sie haben Recht auf die Lesbarkeit. Dies ist nur ein Experiment. Ich glaube nicht, '' req'' und 'res' zu' run' zu übertragen, würde aber funktionieren. Sie werden auch im Körper von 'next' benötigt. –