Node.js “écrire après la fin de” erreur

Starting off avec une base nœud de l'application, et je ne peux pas comprendre comment battre cette "écrire après la fin de" l'erreur, même avec les rappels proposé sur plusieurs sites.

index.js:

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");

var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;

server.start(router.route, handle);

server.js:

var http = require("http");
var url = require("url");

function start(route, handle) {
  function onRequest(request, response) {
    var postData ="";
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(handle, pathname, response);
   }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

router.js:

function route(handle, pathname, response) {
  console.log("About to route a request for " + pathname);
  if (typeof handle[pathname] === 'function') {
    handle[pathname](response);
  } 
  else {
    console.log("No request handler found for " + pathname);
    response.writeHead(404, {"Content-Type": "text/plain"});
    response.write("404 Not found");
    response.end();
  }
}

exports.route = route;

and now the culprit, requestHandlers.js:

function start(response) {
  console.log("Request handler 'start' was called.");

  var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<div>Hello Start</div>' +
    '</body>'+
    '</html>';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();
}

function upload(response) {
    console.log("Request handler 'upload' was called");
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello Upload");
    response.end();
}

exports.start = start;
exports.upload = upload;

Et voici la trace de la pile:

C02RF8L7FVH5:HelloWorld francop$ node index.js
Serveur a démarré.
Demande d' /reçu.
Sur pour acheminer une demande d' /
Demande de gestionnaire de démarrage " a été appelé.
Sur pour acheminer une demande d' /
Demande de gestionnaire de démarrage " a été appelé.
les événements.js:141
jeter er; //non Gérée "erreur" de l'événement
^

Erreur: écrire après la fin
au ServerResponse.OutgoingMessage.écrire (_http_outgoing.js:430:15)
à l'Objet.start (/Users/francop/Documents/Apps/HelloWorld/requestHandlers.js:18:14)
à la route (/Users/francop/Documents/Apps/HelloWorld/routeur.js:5:21)
au IncomingMessage. (/Users/francop/Documents/Apps/HelloWorld/serveur.js:19:6)
au emitNone (événements.js:67:13)
au IncomingMessage.émettre (événements.js:166:7)
au endReadableNT (_stream_readable.js:921:12)
au nextTickCallbackWith2Args (nœud.js:442:9)
au processus._tickCallback (nœud.js:356:17)

Les seules réponses que j'ai trouvé n'importe où ont été "Il est asynchrone, donc utiliser un callback":

response.write(body, function(err) {
    response.end();
});

...Ce qui déclenche exactement la même erreur.

L'aide de cette serait étonnant. Les quelques éparses réponses que j'ai trouvé en ligne n'aide pas du tout.

Merci!

OriginalL'auteur sir_dancealot | 2016-09-01