TypeError: unable to call writeHead method from undefined

I run a simple nodejs application using index, server, router and requestHandler, and it shows an error as soon as the response.writeHead (200, {"Content-Type": "text / html"}); line. The code:

Request file Handler.js:

    var querystring=require("querystring"),
    fs=require("fs"),
    formidable=require("formidable");

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>'+
        '<form action="/upload" enctype="multipart/form-data"'+
        'method="post">'+
        '<input type="file" name="upload" mulitple="multiple">'+
        '<input type="submit" value="Upload file"/>'+
        '</form>'+
        '</body>'+
        '</html>';
    response.writeHead(200,{"Content-Type":"text/html"});
    response.write(body);
    response.end();
}

Index.js file:

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

var handle={}
handle["/"]=requestHandlers.start;
handle["/start"]=requestHandlers.start;
server.start(router.route, handle);

File router.js:

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

Server.js file:

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

    function start(route, handle){
        function onRequest(request, response){
            var pathname=url.parse(request.url).pathname;
            console.log("Request for " + pathname + " received");
            route(handle, pathname);
            route(handle,pathname,response,request);
        }
        http.createServer(onRequest).listen(8888);
        console.log("Server has started");
    }
exports.start=start;
0
source share
1 answer

A few errors in the code that I would like to point out

Running the RequestHandlers function is not exported. Therefore, index.js cannot use this function. You must add this first to the requestHandlers.js file

exports.start = start;

router.js. if , , handle [pathname]. - . , : a) b) - . (, URL-), . , handle [pathname]. , router.js -

handle[pathname](response);

, server.js. . (handle, pathname). -, . , node.js , , , . , server.js

route(handle,pathname,request,response);

. , . , - , .

+1

Source: https://habr.com/ru/post/1536448/


All Articles