Failed to connect mongodb from shell / robomongo. But connected via nodejs code - node.js

I have tried to connect the mongodb from shell using the following command.
mongo xxxxx.mongolab.com:47612/dbname -u user -p password
But I am getting the error : Error: 18 Authentication failed.
Same authorization failure when I try to connect from Robomongo.
But when I tried to connect mongodb from my NodeJS code, its working perfect.
NodeJS Code:
mongoose.connect('mongodb://user:password#xxxxx.mongolab.com:47612/dbname',
function (err){
if (err) throw err;
console.log("db connected")
});
Also I tried to change the bind IP in mongod.conf from 127.0.0.1 to 0.0.0.0
Issue still exists.

Related

How do you connect to a localhost PostgreSQL Database?

I'm getting an authorization error when trying to connect to my postgres database through localhost. I can log in fine with sudo -u postgres psql. When trying to connect through my Express application (using both Sequelize and node-postgres) I get an error.
error:
error: password authentication failed for user: "postgres"
.env:
PGUSER="postgres"
PGHOST=""
PGPASSWORD=""
PGDATABASE=""
PGPORT=""
sequelize config:
const sequelize = new Sequelize('postgres://postgres#localhost:5432/test', { ... });
I've edited my pg_hba.conf file, as well to accept all localhost connections with:
local all all _BLANK_ trust

connect to mongodb in docker from node app in AWS SAM

I am getting errors connecting to mongodb running in a docker container from my Nodejs app running in AWS SAM (used to say "in my host").
I run mongodb like:
$ docker run --name mongo-myapp --rm -d -p 27018:27017 mongo
and I see the results:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab8248d17d2d mongo "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:27018->27017/tcp mongo-myapp
~~I can successfully connect and insert data using clients running on my host like MongoDB Compass and Robo 3T Community Edition, specifying port 27018.~~
When I attempt to connect with this code running on my host, (not in a docker container):
const { MongoClient } = require('mongodb');
const mongoConnection = 'mongodb://127.0.0.1:27018';
MongoClient.connect(mongoConnection, (err, db) => {
if (err) {
console.error("Failed to connect to mongodb server", err);
return reject(err);
}
console.log("Connected successfully to mongodb server");
resolve(db);
});
I always see the error:
MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27018
I get the same error using another port with all steps, like 27017.
UPDATE
It turns out my code was not running on the host. It was running in another docker container. I did not realize AWS SAM would put my code into a docker container so I did not mention it in the original question.
Now I run my code with mocha test to make sure it will run on my host, and it connects to the mongo database with no problems.
When I launched a local server using AWS SAM's start-api, I had problems. Perhaps the solution will be to specify a network when starting the mongo container as well as the SAM environment.
Now that the problem is known that the Nodejs code was running within a docker container created by AWS SAM, we can help the Nodejs code connect with Mongodb running in a separate docker container with a port exposed on the host with at least one solution:
Change the connection string to mongodb://host.docker.internal:27018 which helps the code in the container to use a service running on the host.
Install the necessary dependency for mongodb in node.js https://www.npmjs.com/package/mongodb
const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27018/testdb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
console.log("Database created!");
db.close();
});
Since you are able to connect from other clients in the same host, I assume that the container is bound to specific external facing ip of the host.
Can you try connecting to the ip of the host instead of 127.0.0.1
Eg: mongodb://external-ip:27018
Though the mapping -p 27018:27017 should bind the port to all ips, you can enforce this by -p 0.0.0.0:27018:27017.

MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]

I'm new in nodeJS, started learning by following a trailer on youtube, everything goes well until I added the connect function if mongodb,
mongo.connect("mongodb://localhost:27017/mydb")
when I run my code on cmd (node start-app), get the following error,
MongoNetworkError: failed to connect to server [localhost:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017]
Could someone explain me which step I missed ?
my code :
var express = require("express");
var MongoClient = require('mongodb');
var url = "mongodb://localhost:27017/mydb";
var webService = require("./webService");
var server = express();
MongoClient.connect(url, function (err, db) {
if (err) throw err;
console.log("Database created!");
db.close();
});
server.use(express.urlencoded({ extended: true }));
server.set('views', __dirname);
server.get('/', function (request, response) {
response.sendFile(__dirname + '/MainPage.html');
});
server.get('/Sign', function (request, response) {
response.render(__dirname + '/Sign.ejs');
});
server.post("/signUp", webService.signUp);
server.post("/createUser", webService.createUser);
server.listen(5500);
You have to install MongoDB database server first in your system and start it.
Use the below link to install MongoDB
https://docs.mongodb.com/manual/installation/
If you have installed MongoDB check if the server is in which state (start/stop). Try to connect through mongo shell client.
Many of them don't add this, especially in AWS EC2 Instance, I had the same issue and tried different solutions.
Solution: one of my database URL inside the code was missing this parameter 'authSource', adding this worked for me.
mongodb://myUserName:MyPassword#ElasticIP:27017/databaseName?authSource=admin
I faced same issue but after a lot of RND. I found that whts the problem so run this command on your terminal.
sudo service mongod start
then run mongo on terminal
After trying EVERY solution google came up with on stack overflow, I found what my particular problem was. I had edited my hosts file a long time ago to allow me to access my localhost from my virtualbox.
Removing this entry solved it for me, along with the correct installation of mongoDB from the link given in the above solution, and including the correct promise handling code:
mongoose.connect('mongodb://localhost/testdb').then(() => {
console.log("Connected to Database");
}).catch((err) => {
console.log("Not Connected to Database ERROR! ", err);
});
Following the logic behind #CoryM's answer above :
After trying EVERY solution google came up with on stack overflow, I found what my particular problem was. I had edited my hosts file a long time ago to allow me to access my localhost from my virtualbox.
Removing this entry solved it for me...
I had edited my hosts file too for Python Machine Learning setup 2 months ago. So instead of removing it because I still need it, I use 127.0.0.1 in place of localhost and it worked :
mongoose.connect('mongodb://127.0.0.1/testdb')
Your IP address probably changed.
If you've recently restarted your modem, this changes your IP which was probably whitelisted on Atlas.
Soooo, you'll need to jump back onto Atlas and add your new IP address to the whitelist under Security>Network Access.
This had occurred to me and I have found out that it was because of faulty internet connection. If I use the public wifi at my place, which blocks various websites for security reasons, Mongo refuses to connect. But if I were to use my own mobile data, I can connect to the database.
If the mongoDB server is already installed and if you are unable to connect from a remote host then follow the below steps,
Login to your machine, open mongodb configuration file located at /etc/mongod.conf and change the bindIp field to specific ip / 0.0.0.0 , after that restart mongodb server.
sudo vi /etc/mongod.conf
The file should contain the following kind of content:
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
journal:
enabled: true
processManagement:
fork: true
net:
bindIp: 127.0.0.1 // change here to 0.0.0.0
port: 27017
setParameter:
enableLocalhostAuthBypass: false
Once you change the bindIp, then you have to restart the mongodb, using the following command
sudo service mongod restart
Now you'll be able to connect to the mongodb server, from remote server.
I solved this problem by upgrading major version of mongoose:
Before doing this, make sure (using mongo shell) that you have the correct URL and a running mongo server is available at that URL and the problem still persists.
"dependencies": {
- "mongoose": "^5.4.13",
+ "mongoose": "^6.2.4",
}
just run mongod in terminal on the base folder if everything has been set up like installing mongo db and the client for it like mongoose. After running the command run the project file that you are working on and then the error shouldn't appear.
You can check detail of error by running this command
sudo service mongod status
if error is something like this
Failed to unlink socket file /tmp/mongodb-27017.sock Unknown error
Fatal Assertion 40486 at src/mongo/transport/transport_layer_asio.cpp 670
simply running this will resolve your issue
rm /tmp/mongodb-27017.sock
I don't know if this might be helpful, but when I did this it worked:
Command mongo in terminal.
Then I copied the URL which mongo command returns, something like
mongodb://127.0.0.1:*port*
I replaced the URL with this in my JS code.
first create folder by command line mkdir C:\data\db (This is for database)
then run command mongod --port 27018 by one command prompt(administration mode)- you can give name port number as your wish
I had this issue while working at the local Starbucks and I remembered that when I initially set up my database through Mongo Atlas. I set my IP address to be able to access the database. After looking through several threads, I changed my IP address on Atlas and the issue went away. Hope this helps someone.
This worked for me.
mongoose.Promise = global.Promise;
.connect(
"mongodb://127.0.0.1:27017/mydb",
{ useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true}).then(db => {
console.log("Database connected");
}).catch(error => console.log("Could not connect to mongo db " + error));
I was using localhost, so i changed it to:
mongodb://127.0.0.1:27017/mydb
My problem was the wrong port number for mongoDB server.
I had:
DATABASE_URL= "mongodb://localhost:3000/node-express-mongodb-server"
in my .env file (my environmental variables), but I had written it before running mongoDB server. So when I ran the mongoDB server, it wrote a different port number and I had to change it. I changed it to the right port number (which was written on my cmd window by mongoDB):
DATABASE_URL= "mongodb://localhost:27017/node-express-mongodb-server"
and now it works fine.
if you are a Mac user just upgrade your homeBrew from terminal:
$ brew upgrade
$ mongod --config usr/local/etc/mongod.config
$ Xcode-select --install
$ mongo
1) If you haven't installed mongodb, install it.
2) open a new terminal, type "mongo". This is going to connect you to a MongoDB instance running on your localhost with default port 27017:
mongoose.connect('mongodb://localhost:27017/').then(() => {
console.log("Connected to Database");
}).catch((err) => {
console.log("Not Connected to Database ERROR! ", err);
});
Better just connect to the localhost Mongoose Database only and create your own collections. Don't forget to mention the port number. (Default: 27017)
For the best view, download Mongoose-compass for MongoDB UI.
This one helped me.
Try creating a new folder, if your MongoDB is installed in C:\Program Files the folder should be called db and in a folder data.
C:\data\db
When you start the mongod there should be a log where the db 'isnt found'.
So when none of the above solutions worked for me, after installing everything correctly, I thought to restart the system.
It's working now.
Note that I did everything said above, but no luck. The only restart worked for me.!!
You may also want to restart once.
You have to install MongoDB database server first in your system and start it.
Use the below link to install MongoDB
If you have already installed MongoDB database in your system then you have to check that your DB is in start position or not with the help of following steps:
press CTRL + Shift + Esc
go to the service tab and search for Mongo
check the status - it may be stopped. So click on the Services tab at the bottom right corner and again search for MongoDB
Click on it and start the DB by right click or in left panel.
If the error happens on macbook run this command to keep the mongodb server running.
mongod --config /usr/local/etc/mongod.conf --fork
The issue majorly is that your mongodb server is rejecting the connection it might be that the server is not on/active eventhough it has been installed on your macbook.
In my case the problem was that there was another instance of mongoDB server running I had shutdown my computer without stopping the server hence when I tried running mongosh it gives me that error. Try restarting the computer it will shutdown all the servers and the erro was gone.
I was trying to connect, without starting the service.
This is how i fixed the error (MacOS env).
$ brew services start mongodb-community#6.0
$ mongosh // connected to db and fixed the error.
$ brew services stop mongodb-community#6.0
For me the problem resolved when I started the MongoDB on port other than 27017. Even though nothing was running on 27017 but the problem resolved when I started it on another port.
To do that navigate to the /etc/mongod.conf and change the port: 27017 to some other port like port: 27019.
Then restart the service by:
sudo systemctl restart mongod.service.
And then try to connect to MongoDB by specifying the --port parameter like:
mongod --port 27019, or
mongo --port 27019
Best!
this was my erros:
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.2
MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
SOLUTION:
The best Answes is if you using mac M1 and M2
use restrat with sudo like below
MongoNetworkError solution
sudo brew services restart mongodb-community#6.0
I connected to a VPN and the connection accomplished. I was using school's WiFi which has some restrictions apparently.
I guess you must be connecting to cloud.mongodb.com to your cluster.
One quick fix is to go to the connection tab and add your current IP address(in the cluster portal of browser or desktop app). The IP address must have changed due to a variety of reasons, such as changing the wifi.
Just try this approach, it worked for me when I got this error.
You need to initialize your mongoDB database first, you can run "mongod" in your terminal and then it will be working fine.

Having trouble setting up Postgres server to accept SSL connections

I'm on a Mac using Postgres.app to run a Postgres server.
I'm connecting to the server in Node.js (code copied from Heroku docs):
pg.defaults.ssl = true;
pg.connect(process.env.DATABASE_URL || 'postgres://localhost:5432/my-project', function(err, client) {
if (err) throw err;
console.log('Connected to postgres! Getting schemas...');
client
.query('SELECT table_schema,table_name FROM information_schema.tables;')
.on('row', function(row) {
console.log(JSON.stringify(row));
});
});
I then followed the instructions here to allow my Postgres server to accept SSL connections. I changed the ssl setting to on in my postgresql.conf file. I also generated the required files, server.key and server.crt.
However, when I run my Node server, I get this error:
Error: The server does not support SSL connections
I ran psql and did show ssl. It returned off. So then I thought that maybe I had the wrong config file...but then I did show config_file and I'm definitely in the right place. What else am I missing?
Very likely you forgot to restart the PostgreSQL server.
In case of problems, set log_connections = on and check the PostgreSQL server log.

Nodejs net does not throw error when trying to connect to a host thats not listening

I'm trying to test whether a remote host is listening or not using Node.js net module:
var net = require('net')
var client = net.connect({port:3000, host:remoteHostIP},function(){
});
client.on('error', function(err){
console.log("Error: "+err.message);
});
I would expect that net.connect would throw an error if it can't connect but that's not the case.
Also client.on('error') does not throw an error.
How can I check if the connection has been possible?
It will throw an error when the connection times out which is about one minute of no data transfer.
Error: connect ETIMEDOUT <ip>:3000
Use client.setTimeout() to fire a callback if there's no activity within the allocated time.
The code posted in the question works fine:
node app.js
Error: connect ECONNREFUSED
The issue has been caused by a Virtualbox VM for Docker (running on the developer machine) which had portforwarding configured for port 3000 and grabbed the net connect request for localhost.

Resources