'Issue connection to database
I have an application with a frontend that uses React and a backend that uses the Nodejs environment with the Express framework. To communicate and store the data I use MongoDB. I have been developing this application for a few weeks now and everything is working fine until today.
This morning again I developed and I could test everything, it responded well. Since two hours when I write npm start in my terminal on vscode in the backend folder, I get an error while before my server was running fine. I want to specify that I made a 30min break between when I stopped coding this morning and when I started again this afternoon, I didn't change anything in the code in the meantime but the server doesn't start anymore. I also want to say that npm start in my frontend folder is still working fine.
Implementing mongo db in my backend code
db.js in models folder
const mongoose = require('mongoose');
mongoose.connect(process.env.MONGODB_URI, { useNewURLParser: true, useUnifiedTopology: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error'));
db.once('open', function () {
console.log('Connected')
});
implementation of mongo in app.js of backend folder
var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");
var logger = require("morgan");
var cors = require("cors");
require('dotenv').config();
var whitelist = ['http://localhost:3000']
var corsOption = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
var getAPIRouter = require("./routes/apiRoutes.js");
var app = express();
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "jade");
app.use(cors(corsOption));
app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, "public")));
app.use("/", getAPIRouter);
require('./routes/auth.routes')(app);
require('./routes/user.routes')(app);
const db = require("./models");
const Role = db.role;
db.mongoose
.connect(process.env.MONGODB_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log("Successfully connect to MongoDB.");
initial();
})
.catch(err => {
console.error("Connection error", err);
process.exit();
});
//just for first time running
function initial() {
Role.estimatedDocumentCount((err, count) => {
if (!err && count === 0) {
new Role({
name: "user"
}).save(err => {
if (err) {
console.log("error", err);
}
console.log("added 'user' to roles collection");
});
new Role({
name: "moderator"
}).save(err => {
if (err) {
console.log("error", err);
}
console.log("added 'moderator' to roles collection");
});
new Role({
name: "admin"
}).save(err => {
if (err) {
console.log("error", err);
}
console.log("added 'admin' to roles collection");
});
}
});
}
app.use(function (req, res, next) {
next(createError(404));
});
app.use(function (err, req, res, next) {
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : {};
res.status(err.status || 500);
res.render("error");
});
module.exports = app;
My error in the terminal
PS C:\Users\deyga\Documents\GitHub\PPE\backendPPE> npm start
> [email protected] start C:\Users\deyga\Documents\GitHub\PPE\backendPPE
> node ./bin/www
Successfully connect to MongoDB.
connection error MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your
Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/
at NativeConnection.Connection.openUri (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\connection.js:807:32)
at C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\index.js:340:10
at C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\helpers\promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\index.js:1174:10)
at Mongoose.connect (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\index.js:339:20)
at Object.<anonymous> (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\models\db.js:2:10)
at Module._compile (node:internal/modules/cjs/loader:1099:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) {
reason: TopologyDescription {
type: 'ReplicaSetNoPrimary',
servers: Map(3) {
'cluster0-shard-00-00.0ynbf.mongodb.net:27017' => [ServerDescription],
'cluster0-shard-00-01.0ynbf.mongodb.net:27017' => [ServerDescription],
'cluster0-shard-00-02.0ynbf.mongodb.net:27017' => [ServerDescription]
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
setName: 'atlas-sujybn-shard-0',
logicalSessionTimeoutMinutes: undefined
}
}
node:internal/process/promises:279
triggerUncaughtException(err, true /* fromPromise */);
^
MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're
trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/
at NativeConnection.Connection.openUri (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\connection.js:807:32)
at C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\index.js:340:10
at C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\helpers\promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\index.js:1174:10)
at Mongoose.connect (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongoose\lib\index.js:339:20)
at Object.<anonymous> (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\models\db.js:2:10)
at Module._compile (node:internal/modules/cjs/loader:1099:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) {
reason: TopologyDescription {
type: 'ReplicaSetNoPrimary',
servers: Map(3) {
'cluster0-shard-00-00.0ynbf.mongodb.net:27017' => ServerDescription {
_hostAddress: HostAddress {
isIPv6: false,
host: 'cluster0-shard-00-00.0ynbf.mongodb.net',
port: 27017
},
address: 'cluster0-shard-00-00.0ynbf.mongodb.net:27017',
type: 'Unknown',
hosts: [],
passives: [],
arbiters: [],
tags: {},
minWireVersion: 0,
maxWireVersion: 0,
roundTripTime: -1,
lastUpdateTime: 2826297,
lastWriteDate: 0,
error: MongoNetworkError: connect ETIMEDOUT 108.129.27.210:27017
at connectionFailureError (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongodb\lib\cmap\connect.js:381:20)
at TLSSocket.<anonymous> (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongodb\lib\cmap\connect.js:301:22)
at Object.onceWrapper (node:events:642:26)
at TLSSocket.emit (node:events:527:28)
at emitErrorNT (node:internal/streams/destroy:164:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
},
'cluster0-shard-00-01.0ynbf.mongodb.net:27017' => ServerDescription {
_hostAddress: HostAddress {
isIPv6: false,
host: 'cluster0-shard-00-01.0ynbf.mongodb.net',
port: 27017
},
address: 'cluster0-shard-00-01.0ynbf.mongodb.net:27017',
type: 'Unknown',
hosts: [],
passives: [],
arbiters: [],
tags: {},
minWireVersion: 0,
maxWireVersion: 0,
roundTripTime: -1,
lastUpdateTime: 2826308,
lastWriteDate: 0,
error: MongoNetworkError: connect ETIMEDOUT 52.212.197.12:27017
at connectionFailureError (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongodb\lib\cmap\connect.js:381:20)
at TLSSocket.<anonymous> (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongodb\lib\cmap\connect.js:301:22)
at Object.onceWrapper (node:events:642:26)
at TLSSocket.emit (node:events:527:28)
at emitErrorNT (node:internal/streams/destroy:164:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
},
'cluster0-shard-00-02.0ynbf.mongodb.net:27017' => ServerDescription {
_hostAddress: HostAddress {
isIPv6: false,
host: 'cluster0-shard-00-02.0ynbf.mongodb.net',
port: 27017
},
address: 'cluster0-shard-00-02.0ynbf.mongodb.net:27017',
type: 'Unknown',
hosts: [],
passives: [],
arbiters: [],
tags: {},
minWireVersion: 0,
maxWireVersion: 0,
roundTripTime: -1,
lastUpdateTime: 2826318,
lastWriteDate: 0,
error: MongoNetworkError: connect ETIMEDOUT 34.246.79.174:27017
at connectionFailureError (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongodb\lib\cmap\connect.js:381:20)
at TLSSocket.<anonymous> (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\mongodb\lib\cmap\connect.js:301:22)
at Object.onceWrapper (node:events:642:26)
at TLSSocket.emit (node:events:527:28)
at emitErrorNT (node:internal/streams/destroy:164:8)
at emitErrorCloseNT (node:internal/streams/destroy:129:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21)
}
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
setName: 'atlas-sujybn-shard-0',
logicalSessionTimeoutMinutes: undefined
}
}
Node.js v17.7.2
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\deyga\AppData\Roaming\npm-cache\_logs\2022-04-04T13_57_51_440Z-debug.log
Complete log of this run
0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli 'start'
1 verbose cli ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [ 'prestart', 'start', 'poststart' ]
5 info lifecycle [email protected]~prestart: [email protected]
6 info lifecycle [email protected]~start: [email protected]
7 verbose lifecycle [email protected]~start: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~start: PATH: C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\.bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath;C:\Python310\Scripts\;C:\Python310\;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Git\cmd;C:\Program Files\nodejs\;C:\ProgramData\chocolatey\bin;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Android\android-sdk\platform-tools;C:\Windows\System32\;C:\Users\deyga\AppData\Local\Microsoft\WindowsApps;C:\Users\deyga\AppData\Local\GitHubDesktop\bin;C:\Users\deyga\AppData\Local\Microsoft\WindowsApps;C:\texlive\2020\bin\win32;C:\Users\deyga\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\deyga\AppData\Roaming\npm;C:\Program Files\heroku\bin;C:\Users\deyga\Documents\GitHub\PROJECT_WEB_OCRES;
9 verbose lifecycle [email protected]~start: CWD: C:\Users\deyga\Documents\GitHub\PPE\backendPPE
10 silly lifecycle [email protected]~start: Args: [ '/d /s /c', 'node ./bin/www' ]
11 silly lifecycle [email protected]~start: Returned: code: 1 signal: null
12 info lifecycle [email protected]~start: Failed to exec start script
13 verbose stack Error: [email protected] start: `node ./bin/www`
13 verbose stack Exit status 1
13 verbose stack at EventEmitter.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\index.js:332:16)
13 verbose stack at EventEmitter.emit (events.js:400:28)
13 verbose stack at ChildProcess.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack at ChildProcess.emit (events.js:400:28)
13 verbose stack at maybeClose (internal/child_process.js:1058:16)
13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:293:5)
14 verbose pkgid [email protected]
15 verbose cwd C:\Users\deyga\Documents\GitHub\PPE\backendPPE
16 verbose Windows_NT 10.0.19043
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start"
18 verbose node v14.18.0
19 verbose npm v6.14.15
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] start: `node ./bin/www`
22 error Exit status 1
23 error Failed at the [email protected] start script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]
Message returned in the backend site when I try to access its route: "http://localhost:5000/api/forums"
Not allowed by CORS
Error: Not allowed by CORS
at origin (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\app.js:21:16)
at C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\cors\lib\index.js:219:13
at optionsCallback (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\cors\lib\index.js:199:9)
at corsMiddleware (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\cors\lib\index.js:204:7)
at Layer.handle [as handle_request] (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\express\lib\router\index.js:323:13)
at C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\express\lib\router\index.js:341:12)
at next (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\express\lib\router\index.js:275:10)
at expressInit (C:\Users\deyga\Documents\GitHub\PPE\backendPPE\node_modules\express\lib\middleware\init.js:40:5)
I use two different ports for my backend server (port 5000) and the frontend (port 3000).
I tried to delete node module in my backend folder and then redo an npm install but it didn't change anything. I also tried to upgrade my npm without result either. I also tried to recover my ip address on https://www.whatismyip.com/ to add it in network access in MongoDB but it did not solve my problem either.
MongoDB Network Access settings
I tried to put as much information as possible about the error but if you find any missing let me know and I will try to add it as soon as possible.
I found several people with the same problem as me on the forums but no solution worked for me, if you could help me it would save me :)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
