[英]“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.