Socket.io "Listeners is undefined" - javascript

Sorry if i'm ignorant or there is an actual problem here. I am hosting a http server with node.js, and apon running the server I get the error
C:\Users\Xander\Desktop\Website>node ./processes.js
C:\Users\Xander\Desktop\Website\node_modules\socket.io\node_modules\engine.io\lib\server.js:
var listeners = server.listeners('request').slice(0);
^
TypeError: Cannot read property 'listeners' of undefined
at Server.attach
(C:\Users\Xander\Desktop\Website\node_modules\socket.io\node_modules\engine.io\lib\server.js:423:25)
at Function.attach (C:\Users\Xander\Desktop\Website\node_modules\socket.io\node_modules\engine.io\lib\engine.io.js:124:10)
at Server.listen.Server.attach (C:\Users\Xander\Desktop\Website\node_modules\socket.io\lib\index.js:228:21)
at Object.<anonymous> (C:\Users\Xander\Desktop\Website\processes.js:8:21)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
This error has not occurred before and just recently came up. I've tried reinstalling socket.io, and personally editing the file. Though, to no avail. It fails every time. So i'll gladly take advice on how to fix this. Thank you for your time...
How its being used
//Vars
var http = require('http');
var express = require("express");
var app = express();
var path = require("path");
var connect = require("connect");
var io = require('socket.io').listen(server);
var socket = io.listen(server);
//Defined port
const PORT = 8080;
//Connection handler
function handleRequest(request, response){
response.end(request.url);
};
var server = http.createServer(handleRequest);
//Log all connections made
//Show .html file
app.get('/',function(req,res){
res.sendFile(path.join(__dirname+'/index.html'));
});
//Port to listen to
app.listen(8080);

In this line of your code:
var io = require('socket.io').listen(server);
server is undefined.
You can probably change this:
app.listen(8080);
to this:
var server = app.listen(8080);
var io = require('socket.io').listen(server);
And, get rid of these that are too early in your code:
var io = require('socket.io').listen(server);
var socket = io.listen(server);
And, remove these too since you're using Express as your server:
function handleRequest(request, response){
response.end(request.url);
};
var server = http.createServer(handleRequest);

Related

how to run an ExpressJS application

Nothing seems to work except the "throw new Error" in my code, I have installed all the necessary packages I'm sure. I am getting no errors in other places of my code. I can't seem to find the problem. Hoping someone knows how to solve this.
const express = require('express'); // we're making an ExpressJS App
const bodyParser = require('body-parser'); // we'll use body-parser extensively
//const port =3000
const app = express(); // create the ExpressJS app
// parse the different kinds of requests (content-type) the app handles
// use the "use" method to set up the body-parser middlewear
app.use(express.json()) // application/json
app.use(express.urlencoded({ extended: true })) // application/x-www-form-urlencoded
// Set up Mongoose and our Database connection
const dbConnect = require('./config/AtlasConnect.js');
const mongoose = require('mongoose');
// Set up connection to the database
mongoose.connect(dbConnect.database.url, {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => {
console.log("Successfully connected to the MongoDB database");
}).catch(err => {
console.log('Unable to connect to the MongoDB database', err);
process.exit();
});
throw new Error("NOT WORKING!");
// // create our test route (reply by sending a JSON message as response)
// app.get('/', (req, res) => {
// res.json({"message": "My Phone Shop App. Use the app to manage your favourite s!"});
// });
require('./app/routes/Users.routes.js')(app);
// listen for requests on port 3000
app.listen(3000, () => {
console.log("Server listening on port 3000");
});
This is the error I get in terminal:
PS C:\Users\jaffe\Documents\assignment-06-17518623> node assignment-06.js
C:\Users\jaffe\Documents\assignment-06-17518623\assignment-06.js:44
throw new Error("NOT WORKING!");
^
Error: NOT WORKING!
at Object.<anonymous> (C:\Users\jaffe\Documents\assignment-06-17518623\assignment-06.js:44:7)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47
Line throw new Error("NOT WORKING!"); always throws exception, and stops code execution.
See documentation https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Statements/throw

Unexpected Token ILLEGAL on running node.js

I'm doing a programming course and I'm trying to run the command node server.js. However this is the result I get.
node server.js
/home/lalitp/webapp/imad-app/server.js:26
console.log(`IMAD course app listening on port ${port}!`);
^
SyntaxError: Unexpected token ILLEGAL
at Module._compile (module.js:439:25)
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)
at startup (node.js:119:16)
at node.js:902:3
This is the server.js file:
var express = require('express');
var morgan = require('morgan');
var path = require('path');
var app = express();
app.use(morgan('combined'));
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'ui', 'index.html'));
});
app.get('/ui/style.css', function (req, res) {
res.sendFile(path.join(__dirname, 'ui', 'style.css'));
});
app.get('/ui/madi.png', function (req, res) {
res.sendFile(path.join(__dirname, 'ui', 'madi.png'));
});
// Do not change port, otherwise your app won't run on IMAD servers
// Use 8080 only for local development if you already have apache running on 80
var port = 80;
app.listen(port, function () {
console.log(`IMAD course app listening on port ${port}!`);
});
Thanks for the help :)
You are probably using an older version of Node.js, which does not support the so-called back-tick quoted strings (surrounded by the ` character).
If you change
console.log(`IMAD course app listening on port ${port}!`);
to
console.log('IMAD course app listening on port ' + port + '!');
it should work.
The back-tick quoted strings are for interpolating variables, i.e. integrating a JavaScript expression into a string. This makes long strings with lots of variables easier to read than concatenating every single bit by using the + operator.
It seems that you're using ES5 and not ES6 so you cannot use ` token for a string :
console.log('IMAD course app listening on port ${port}!');

Object #<MongoClient> has no method 'open'

I've been trying to make a simple site with Node.js, Express.js, and MongoDB. I'm new to these technologies and have been having problem set up the database
Here is snippet of code in my index.js file:
var http = require('http'),
express = require('express'),
path = require('path'),
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
CollectionDriver = require('./collectionDriver').CollectionDriver;
var app = express();
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
var mongoHost = 'localHost';
var mongoPort = 27017;
var collectionDriver;
var mongoClient = new MongoClient(new Server(mongoHost, mongoPort));
mongoClient.open(function(err, mongoClient) {
if (!mongoClient) {
console.error("Error! Exiting... Must start MongoDB first");
process.exit(1);
}
var db = mongoClient.db("MyDatabase");
collectionDriver = new CollectionDriver(db);
});
After I try to run node index.js in terminal, it says the following:
js-bson: Failed to load c++ bson extension, using pure JS version
/Users/username/dev/ga-final/index.js:31
mongoClient.open(function(err, mongoClient) { //C
^
TypeError: Object #<MongoClient> has no method 'open'
at Object.<anonymous> (/Users/username/dev/ga-final/index.js:31:13)
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)
at startup (node.js:119:16)
at node.js:906:3
What is wrong? Why can't I call open? Can you help me fix this? thanks!
This is happening may be because you are using new version of mongodb it is working fine after I use mongodb driver version 1.4.
npm install mongodb#1.4.x
Take a look at the mongodb docs. Your mongoClient object is not what you think it is, and that why there isn't an open() method available.
Make your example code look more like theirs:
var MongoClient = require('mongodb').MongoClient
, assert = require('assert');
// Connection URL
var url = 'mongodb://localhost:27017/myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, db) {
assert.equal(null, err);
console.log("Connected correctly to server");
db.close();
});

socket.io doesn't seem to be starting and doesn't recognize io.configure method

I am trying to get socket.io running with node/express (I have done this countless times - so I am pretty baffled). When I try to configure socket.io with the io.configure method I get an error:
io.configure(function() {
^
TypeError: Object #<Server> has no method 'configure'
at Object.<anonymous> (/home/yz/webdev/ground/app.js:377:4)
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)
at startup (node.js:119:16)
at node.js:902:3
My code is exactly how it says to do it on socket.io - but I'll post it just in case:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
server.listen(8000);
//other declarations
app.use(...
passport.use(...
//some routes
app.get(...
app.post(...
io.configure(function() {
io.set('transports', ['websocket','xhr-polling','flashsocket']);
io.set('flash policy port', 10843);
});
io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
...
});
});
The error gets thrown at the io.configure method - I have done this before with other sites, I don't understand whey it isn't working now. Thanks.
UPDATE
I was just reading here that io.configure doesn't exist anymore - however, I can't seem to get it working the new way either. Here is my new code:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
//var io = require('socket.io').listen(server);
var socket = require('socket.io')({
'transports': ['websocket','xhr-polling','flashsocket'],
'flash policy port': 10843
});
var io = socket.listen(server);
io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
...
});
});
I'm not getting any errors, socket.io just doesn't seem to be starting.
You're assigning io to a server, which is causing the problems when you attempt to call functions on io which are available from socket.io. Try replacing this line:
var io = require('socket.io').listen(server);
With this line:
var io = require('socket.io')(server);
The socket.io docs list a couple of configuration patterns you can take advantage of, and it is possible to create a server using socket.io. But since you're already creating a server, you shouldn't need to do it with socket.io.

Cannot get my file to display through Node.js

I'm having problems with my node server. I'm trying to gather data from my coffees.js file which is in a routes folder by linking it to my server.js file. Both my server.js file and routes folder containg the coffees.js file are in my nodeservers folder. When I run the server.js (which is probably the problem as I think it is coded wrong) I get the following error:
Server running at http-00000000-:8080/
Listening on port 8080...
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:904:11)
at Server._listen2 (net.js:1042:14)
at listen (net.js:1064:10)
at Server.listen (net.js:1138:5)
at Function.app.listen (/node_modules/express/lib/application.js:533:24)
at Object.<anonymous> (/home/ec2-user/nodeservers/simpleserver.js:19:5)
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)
[ec2-user#ip-10-74-151-139 nodeservers]$ ^C
[ec2-user#ip-10-74-151-139 nodeservers]$
My simpleserver.js file looks like this:
// Load the http module to create an http server.
var http = require('http');
// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello World\n");
});
// Listen on port 8000, IP defaults to 127.0.0.1
server.listen(8080);
// Put a friendly message on the terminal
console.log("Server running at http://127.0.0.1:8080/");
var express = require('express'),
coffees = require('./routes/coffees');
var app = express();
app.get('/coffees', coffees.findAll);
app.get('/coffees/:id', coffees.findById);
app.listen(8080);
console.log('Listening on port 8080...');
Anyone able to tell me whats wrong?
Remove either
server.listen(8080) or app.listen(8080).
I think you want to use express, so remove the first.

Categories

Resources