Reputation: 535
I'm building a node.js app using express and jade frameworks. The app has the standard skeleton, that's how it looks the main directory :
The problem occurs when I try to load the socket.io module in a js file (called lets say x.js) within the public directory. That's where I've implemented some logic tightly connected to user-action event handling. So in other words when someone clicks on a button 'connect', I'd like to establish connection using socket.io. The problem is that when I add this line
var socket_io = require('socket.io'); in x.js (x.js is located in the /public dir)
the whole functionality suddenly stops working, I guess due to the fact that the module is not loaded although the var socket_io isn't used anywhere below within the x.js file. If I add the line var socket_io = require('socket.io'); to app.js everything works. I looked into this SO question but with no success. Can someone explain why is this happening and what am I doing wrong?
Edit: Just to clarify that I've added 'socket.io' to the package.json file. Also installed socket.io both globally and locally using npm install (-g) socket.io command.
Upvotes: 0
Views: 223
Reputation: 6332
This is not an attempt to answer the question asked but a further question put to me in the commments. Ideally I would have answered it in the comments but felt a visual aspect could explain better.
I have a folder structure like this in my app, an MVC type structure. The controllers/
folder contains the business logic. The models/
folder contains my models. The routes folder contains routes/
and the views/
folder contains my jade templates.
Upvotes: 3
Reputation: 191
To init socket.io you need some crucial things, like the server var that is init in app.js file. So, if you try to require socket.io out of app.js and you try to init socket.io, then you could have some troubles. Because socket.io can't be init without the server var in your case.
If you try to require socket.io and not init it. I think you will have not problem. So try to understand the section that is related to Express in the socket.io documentation : http://socket.io/docs/#
Then you can try to use the npm module for express and socket.io : http://express-io.org/
Or you can deal with socket.of() method : http://socket.io/docs/rooms-and-namespaces/#
In any event, you should init socket.io with the server var. So, you can make your module to manage socket.io behavior, define some methods, etc. For this purpose, you can passe socket.io in argument to your route files. See here :Use socket.io inside a express routes file Then, that logic allow you to use socket.io anywhere in your app.
Upvotes: 2