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
Author by
Admin
Updated on June 29, 2022Comments
-
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 almost 10 years+1 I think that's exactly what is happening. It would yield exactly that same error.
-
Aaron Dufour almost 10 yearsThe stack trace shows a frame in
http.js
, so this seems pretty likely. -
Admin almost 10 yearsThank you. That is exactly what the problem was!