Node.js https.createServer抛出TypeError:listener必须是一个函数

时间:2014-06-05 18:53:41

标签: javascript node.js https

我已经阅读了关于此的所有帖子,我知道它一定是愚蠢的,但我无法弄清楚为什么下面的代码会抛出“ TypeError:listener必须是一个函数

假设选项

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);

控制台输出:

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)

任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:19)

您在哪里指定https?看起来您可能需要http,而不是httpshttp.createServer不接受https.createServer等选项。

答案 1 :(得分:1)

使用节点版本<9.6时,您可能会遇到此错误

查看文档和历史记录。我很困惑,文档说我可以在http.createServer上使用选项对象,并得到这个错误,直到我意识到我有一段时间没有更新节点了。

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

答案 2 :(得分:0)

我收到了同样的错误消息:

throw TypeError('listener must be a function');

我有两个单独的文件server.js和handler.js。 我的问题是我在server.js中要求(require(./handler.js)我的处理程序文件时我没有从handler.js文件中导出它。你必须:module.exports =handler;在处理程序文件的底部

答案 3 :(得分:0)

这主要来自版本不匹配。最新版本的nodejs的http.createServer()确实像https一样接受参数中的选项。