繁体   English   中英

将Node.js HTTP服务器对象传递给Socket.IO时,“对象不是函数”

[英]“Object is not a function” when passing a Node.js HTTP server object to Socket.IO

几个月前,当我创建一个HTTPS服务器时,这个工作正在运行,但今天我重新访问这个应用程序时切换到http(不确定这个交换机是否直接相关,只是提到它),我创建了一个服务器并将其传递给socket.io:

init.js

var server      = require(dirPath + "/custom_modules/server").serve(80); 
var socket      = require(dirPath + "/custom_modules/socket").socket(server);

重要的是我将服务器传递给socket.io(我知道有其他方法可以初始化套接字),这是因为当我稍后切换回服务HTTPS时,为了加密websocket连接必须要这样做。

所以我的服务器模块:

//serve files
module.exports.serve = function(port) {
    //var server = https.createServer(options, function(req, res) { // SSL Disabled
    var server = http.createServer(function(req, res) { 

        // Parse & process URL
        var reqInfo = url.parse(req.url, true, true), path = reqInfo.pathname;

        // Quickly handle preloaded requests
        if (preloaded[path])
            preloadReqHandler(req, res, preloaded[path], path);

        // Handle general requests
        else
            generalReqHandler(req, res, reqInfo);
    }).listen(port);
    return server; //this should be returning an http server object for socket.io
};

和我的套接字模块:

module.exports.socket = function(server) {

    //create socket
    var socket = require(dirPath + '/node_modules/socket.io')(server);
    //                                                       ^ error

    // .. snip ..

    //handle client connection
    socket.on("connection", function(client) {
        // .. snip ..
    });
};

和我的错误:

 /home/ec2-user/Sales_Freak/server/custom_modules/socket.js:17 var socket = require(dirPath + '/node_modules/socket.io')(server); ^ TypeError: object is not a function at Object.module.exports.socket (/home/ec2-user/Sales_Freak/server/custom_modules/socket.js:17:59) at Object.<anonymous> (/home/ec2-user/Sales_Freak/server/init.js:16:59) 

假设上面正确地需要所有必需的Node.JS模块。 我今天犯的是什么愚蠢的错误?

导出的模块不是函数,请参考之前的语句:

var socket      = require(dirPath + "/custom_modules/socket").socket(server);

并将其与您当前的陈述进行比较:

var socket = require(dirPath + '/node_modules/socket.io')(server);

我认为你的意思是这样做。

var socket = require(dirPath + '/node_modules/socket.io').socket(server);

这可能对其他人有帮助,也可能没有用,但我的问题是我更改了Node.js服务器文件的目录,而socket.io没有安装在新位置。

模块位于node_modules但未安装。 我实际上不确定安装是如何与npm模块一起工作的,但是模块存在,因此没有抛出一个错误,说它不存在,但是在我执行npm install socket.io之前没有表现得像它真的那样

如果在这种情况下出现此错误,则忘记安装socket.io。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM