Node.js https.createServer throws TypeError: listener must be a function

11,700

Solution 1

Where do you assign https? It looks like you’re probably requiring http, not https. http.createServer doesn’t accept options like https.createServer.

Solution 2

You may hit this error when using a node version < 9.6

See the docs and history. I was very confused that the docs said I could use an options object on http.createServer and got this error until I realized I hadn't updated node in a while.

https://nodejs.org/api/http.html#http_http_createserver_options_requestlistener

Share:
11,700
Admin
Author by

Admin

Updated on June 29, 2022

Comments

  • Admin
    Admin almost 2 years

    I've read posts all over concerning this and I know it must be something silly, but I can't figure out why the following code is throwing "TypeError: listener must be a function"

    Assume options

    var server = https.createServer(options, function(request,response){
    if (request.url==='/') request.url='/home/altronic/Opti-Cal/web/arimonitor.htm';
    console.log("Request: " + request.url);
    fs.readFile("public"+request.url,function(error,data){
        if (error) {
            response.writeHead(404, {"Content-type":"text/plain"});
            response.end ("Sorry the page you requested was not found.");
        } else {
            response.writeHead(200,{"Content-type":mime.lookup('public'+request.url)});
            response.end (data);
    
                }
    })
    }).listen(port);
    

    Console output:

    events.js:130
    throw TypeError('listener must be a function');
          ^
    TypeError: listener must be a function
    at TypeError (<anonymous>)
    at Server.EventEmitter.addListener (events.js:130:11)
    at new Server (http.js:1816:10)
    at Object.exports.createServer (http.js:1846:10)
    at Object.<anonymous> (/home/altronic/Opti-Cal/src/Opti-Cal_HTTPS_Server.js:42:20)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    

    Can anyone help me figure this out?

  • Edwin Dalorzo
    Edwin Dalorzo almost 10 years
    +1 I think that's exactly what is happening. It would yield exactly that same error.
  • Aaron Dufour
    Aaron Dufour almost 10 years
    The stack trace shows a frame in http.js, so this seems pretty likely.
  • Admin
    Admin almost 10 years
    Thank you. That is exactly what the problem was!