-
-
Save camperbot/1414cc9433044e306dd7fd0caa1c6254 to your computer and use it in GitHub Desktop.
'use strict'; | |
require('dotenv').config(); | |
const express = require('express'); | |
const myDB = require('./connection'); | |
const fccTesting = require('./freeCodeCamp/fcctesting.js'); | |
const session = require('express-session'); | |
const passport = require('passport'); | |
const routes = require('./routes'); | |
const auth = require('./auth.js'); | |
const app = express(); | |
const http = require('http').createServer(app); | |
const io = require('socket.io')(http); | |
const passportSocketIo = require('passport.socketio'); | |
const cookieParser = require('cookie-parser'); | |
const MongoStore = require('connect-mongo')(session); | |
const URI = process.env.MONGO_URI; | |
const store = new MongoStore({ url: URI }); | |
app.set('view engine', 'pug'); | |
fccTesting(app); //For FCC testing purposes | |
app.use('/public', express.static(process.cwd() + '/public')); | |
app.use(express.json()); | |
app.use(express.urlencoded({ extended: true })); | |
app.use(session({ | |
secret: process.env.SESSION_SECRET, | |
resave: true, | |
saveUninitialized: true, | |
cookie: { secure: false }, | |
key: 'express.sid', | |
store: store | |
})); | |
app.use(passport.initialize()); | |
app.use(passport.session()); | |
io.use( | |
passportSocketIo.authorize({ | |
cookieParser: cookieParser, | |
key: 'express.sid', | |
secret: process.env.SESSION_SECRET, | |
store: store, | |
success: onAuthorizeSuccess, | |
fail: onAuthorizeFail | |
}) | |
); | |
myDB(async (client) => { | |
const myDataBase = await client.db('database').collection('users'); | |
routes(app, myDataBase); | |
auth(app, myDataBase); | |
let currentUsers = 0; | |
io.on('connection', (socket) => { | |
++currentUsers; | |
io.emit('user count', currentUsers); | |
console.log('user ' + socket.request.user.username + ' connected'); | |
socket.on('disconnect', () => { | |
console.log('A user has disconnected'); | |
--currentUsers; | |
io.emit('user count', currentUsers); | |
}); | |
}); | |
}).catch((e) => { | |
app.route('/').get((req, res) => { | |
res.render('pug', { title: e, message: 'Unable to login' }); | |
}); | |
}); | |
function onAuthorizeSuccess(data, accept) { | |
console.log('successful connection to socket.io'); | |
accept(null, true); | |
} | |
function onAuthorizeFail(data, message, error, accept) { | |
if (error) throw new Error(message); | |
console.log('failed connection to socket.io:', message); | |
accept(null, false); | |
} | |
http.listen(process.env.PORT || 3000, () => { | |
console.log('Listening on port ' + process.env.PORT); | |
}); |
Below is my server.js code and I'm getting this error: Error connecting to db: connect ECONNREFUSED 127.0.0.1:27017. Can anybody please help me out! Thanks for helping!
'use strict';
require('dotenv').config();
const express = require('express');
const myDB = require('./connection');
const fccTesting = require('./freeCodeCamp/fcctesting.js');
const session = require('express-session');
const passport = require('passport');
const routes = require('./routes.js');
const auth = require('./auth.js');
const app = express();
app.set('view engine', 'pug');
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const passportSocketIo = require('passport.socketio');
const cookieParser = require('cookie-parser');
const MongoStore = require('connect-mongodb-session')(session);
const URI = process.env.MONGO_URI;
const store = new MongoStore({ url: URI });
fccTesting(app); //For FCC testing purposes
app.use('/public', express.static(process.cwd() + '/public'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
cookie: {secure: false},
key: 'express.sid',
store: store
}));
app.use(passport.initialize());
app.use(passport.session());
io.use(
passportSocketIo.authorize({
cookieParser: cookieParser,
key: 'express.sid',
secret: process.env.SESSION_SECRET,
store: store,
success: onAuthorizeSuccess,
fail: onAuthorizeFail
})
);
myDB(async client => {
const myDataBase = await client.db('AdvancedNodeandExpress').collection('users');
routes(app, myDataBase);
auth(app, myDataBase);
let currentUsers = 0;
io.on('connection', socket => {
++currentUsers;
io.emit('user count', currentUsers);
console.log('user' + socket.request.user.username +
' connected'
);
socket.on('disconnect', () => {
--currentUsers;
console.log('A user has disconnected!');
io.emit('user count', cuurentUsers);
});
});
}).catch((e) => {
app.route('/').get((req, res) => {
res.render('pug', {title: e, message: 'Unable to login'});
});
});
function onAuthorizeSuccess(data, accept) {
console.log('successful connection to socket.io');
accept(null, true);
}
function onAuthorizeFail(data, message, error, accept) {
if (error) throw new Error(message);
console.log('failed connection to socket.io:', message);
accept(null, false);
}
const PORT = process.env.PORT || 3000;
http.listen(PORT, () => {
console.log('Listening on port ' + PORT);
});
Your database connection is not set up well..more over, have you defined your database in your secret environment?
Your database connection is not set up well..more over, have you defined your database in your secret environment?
But I was able to login in my previous tests! And I can also see documents in my database here in Atlas where FCC login credentials are also there.
username:"freeCodeCampTester1646219062494"
password:"freeCodeCampTester1646219062494"
Always put your codes in btw 2 backticks (
)so its easier to read.
@Ankeet-Ak Also try to fix cuurentUsers
typo on line 63 of your server.js
@6ix-Ville But my database name is 'AdvanceNodeandExpress' and even if I change it to 'database' it still shows the same error.
Actually, I'm completely beginner to creating db like this as in the last course 'Backend Development and API' we were not taught creating db like this. So, can you please give some references on how to create database like here.
@dwisatriow thanks for your help! After correcting the typo, the page loaded but again it was unable to access db!
Has anyone tried: https://www.npmjs.com/package/passport-jwt.socketio, as a replacement for 'passport.socketio'? This one is not deprecated. 6ix-Ville, can you show us your code so we can see what your server looks like?
Yes I tried it, it not working
passport.socketio still works for me
how to pass the tests since this dependency cannot be installed?
Make sure you use the versions specified. i.e. passport.socketio@~3.7.0, connect-mongo@~3.2.0, and cookie-parser@~1.4.5
till they update the material and tests.
I just tried a different dependency called 'connect-mongodb-session' and it worked. You can view it here: https://www.npmjs.com/package/connect-mongodb-session
worked for me. Just remember to access user name like this -> socket.request.user.username instead of -> socket.request.user.name.
Use this process if you want to still use connect-mongo: https://stackoverflow.com/questions/66654037/mongo-connect-error-with-mongo-connectsession. And use this process to replace passport-socket.io since it is deprecated: https://github.com/jfromaniello/passport.socketio/issues/148.
Still not passed the test.
Please recommend.
Below is my server.js.
'use strict';
require('dotenv').config();
const express = require('express');
const myDB = require('./connection');
const fccTesting = require('./freeCodeCamp/fcctesting.js');
const session = require('express-session');
const passport = require('passport');
const routes = require('./routes');
const auth = require('./auth.js');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);
const passportSocketIo = require('passport.socketio');
const cookieParser = require('cookie-parser');
var MongoStore = require('connect-mongodb-session')(session);
const URI = process.env.MONGO_URI;
const store = new MongoStore({ url: URI });
app.set('view engine', 'pug');
fccTesting(app); //For FCC testing purposes
app.use('/public', express.static(process.cwd() + '/public'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
secret: process.env.SESSION_SECRET,
resave: true,
saveUninitialized: true,
cookie: { secure: false },
key: 'express.sid',
store: store
}));
app.use(passport.initialize());
app.use(passport.session());
io.use(
passportSocketIo.authorize({
cookieParser: cookieParser,
key: 'express.sid',
secret: process.env.SESSION_SECRET,
store: store,
success: onAuthorizeSuccess,
fail: onAuthorizeFail
})
);
myDB(async (client) => {
const myDataBase = await client.db('database').collection('users');
routes(app, myDataBase);
auth(app, myDataBase);
let currentUsers = 0;
io.on('connection', (socket) => {
++currentUsers;
io.emit('user count', currentUsers);
console.log('user ' + socket.request.user.username + ' connected');
socket.on('disconnect', () => {
console.log('A user has disconnected');
--currentUsers;
io.emit('user count', currentUsers);
});
});
}).catch((e) => {
app.route('/').get((req, res) => {
res.render('pug', { title: e, message: 'Unable to login' });
});
});
function onAuthorizeSuccess(data, accept) {
console.log('successful connection to socket.io');
accept(null, true);
}
function onAuthorizeFail(data, message, error, accept) {
if (error) throw new Error(message);
console.log('failed connection to socket.io:', message);
accept(null, false);
}
http.listen(process.env.PORT || 3000, () => {
console.log('Listening on port ' + process.env.PORT);
});
Try using connect-mongo using the method I linked above: https://stackoverflow.com/questions/66654037/mongo-connect-error-with-mongo-connectsession. You need to use this syntax for declaration: const MongoDBStore = require('connect-mongo'); const URI = process.env.MONGO_URI; const store = MongoDBStore.create({ mongoUrl: URI });
I am not sure if passport-socket.io will work for you as it did not for my set up so I suggest using this method to replace it: https://github.com/jfromaniello/passport.socketio/issues/148. Your tests may not even pass but if you run it, it should work perfectly fine if you follow those links.
Thank you.
@6ix-Ville I think that is already working fine, try to register / log in into your website, does it says "user <"username"> attempted to log in." ?