Подтвердить что ты не робот

Ошибка ECONNREFUSED при подключении к mongodb от node.js

Я знаю, что делаю очень глупо и noobish, но я надеюсь, что кто-то может помочь мне настроить базовое соединение с mongodb из node.js на mac.

Я установил mongodb, используя homebrew, похоже, работал неплохо. Я запустил сервер (mongod) в качестве локально зарегистрированного пользователя и открыл второй терминал и подтвердил, что могу подключиться к нему с помощью mongo. Когда я запускаю mongo, я получаю сообщение "connect to: localhost: 27017/test", за которым следует командная строка. Выпустил несколько команд в оболочке монго, все, кажется, работает там. Выключить и запустить оба терминала.

Я также подтвердил, что могу связаться с веб-интерфейсом на localhost: 28017.

Я установил node.js и добавил пакет mongoose. Теперь попытаемся подключиться с помощью супер простого приложения node.js(также запущенного как локально зарегистрированного пользователя):

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

Я получаю следующую ошибку

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: connect ECONNREFUSED
    at errnoException (net.js:901:11)
    at Object.afterConnect [as oncomplete] (net.js:892:19)

Прижав голову к стене, пытаюсь заставить что-то настолько просто работать. Что мне не хватает?

Изменить: Вот журналы из mongod. Как вы можете видеть, я много раз пробовал, и они все не так быстро, а мгновенно:

Thu Dec  5 08:19:43.700 [initandlisten] MongoDB starting : pid=14412 port=27017 dbpath=/usr/local/var/mongodb 64-bit host=mobadmins-MacBook-Pro-3.local
           08:19:43.700 [initandlisten] db version v2.4.8
           08:19:43.700 [initandlisten] git version: nogitversion
           08:19:43.700 [initandlisten] build info: Darwin mobadmins-MacBook-Pro-3.local 12.4.0 Darwin Kernel Version 12.4.0: Wed May  1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
           08:19:43.700 [initandlisten] allocator: tcmalloc
           08:19:43.700 [initandlisten] options: { bind_ip: "127.0.0.1", config: "/usr/local/etc/mongod.conf", dbpath: "/usr/local/var/mongodb", logappend: "true", logpath: "/usr/local/var/log/mongodb/mongo.log", rest: true }
           08:19:43.700 [initandlisten] journal dir=/usr/local/var/mongodb/journal
           08:19:43.700 [initandlisten] recover : no journal files present, no recovery needed
           08:19:43.729 [websvr] admin web console waiting for connections on port 28017
           08:19:43.729 [initandlisten] waiting for connections on port 27017
           08:22:34.561 [initandlisten] connection accepted from 127.0.0.1:52160 #3 (1 connection now open)
           08:22:34.563 [conn3] recv(): message len 1124073472 is too large. Max is 48000000
           08:22:34.563 [conn3] end connection 127.0.0.1:52160 (0 connections now open)
           08:24:41.298 [initandlisten] connection accepted from 127.0.0.1:52166 #4 (1 connection now open)
           08:24:41.304 [conn4] end connection 127.0.0.1:52166 (0 connections now open)
           08:25:06.938 [initandlisten] connection accepted from 127.0.0.1:52168 #5 (1 connection now open)
           08:25:06.943 [conn5] end connection 127.0.0.1:52168 (0 connections now open)
           08:25:18.220 [initandlisten] connection accepted from 127.0.0.1:52172 #6 (1 connection now open)
           08:25:18.225 [conn6] end connection 127.0.0.1:52172 (0 connections now open)
           08:25:38.811 [initandlisten] connection accepted from 127.0.0.1:52175 #7 (1 connection now open)
           08:25:38.816 [conn7] end connection 127.0.0.1:52175 (0 connections now open)
4b9b3361

Ответ 1

ОК, это был еще один случай, когда я не был действительно готов в информации, опубликованной выше. Мое приложение node.js было очень простым, но я включил еще пару строк в свой node.js код, который, по-видимому, вызвал эту проблему.

В частности, у меня была указана другая переменная, которая вызывала какой-то другой код, который делал отдельный вызов базы данных, используя неверную информацию db. Вот почему при использовании кода Xinzz ошибка журнала консоли, похоже, не изменилась. Это была не команда mongoose.connect, которая выдавала ошибку!

Извлеченный урок, локализовать проблему и прокомментировать несвязанный код! Извините, ребята, я знал, что это был тупой.

Ответ 2

Ошибка ECONNREFUSED

В этой версии node есть несколько причин этой ошибки:

  • Ваш порт уже обслуживает службу, поэтому он откажется от вашего соединения.

    перейдите в командную строку и получите pid, используя следующую команду

    $ lsof -i:port_number

    Теперь убить pid, используя

    $ kill -9 pid(which you will get by above command)

  • Ваш сервер не работает, например. в этом случае, пожалуйста, проверьте, запущен или запущен ваш сервер mongoose, используя следующую команду.

    $ mongod

  • Также возможно, что ваш localhost настроен неправильно, поэтому используйте 127.0.0.1:27017 вместо localhost.

Ответ 3

Используйте этот код для настройки соединения mongodb:

var mongoose = require('mongoose');

var mongoURI = "mongodb://localhost:27017/test";
var MongoDB = mongoose.connect(mongoURI).connection;
MongoDB.on('error', function(err) { console.log(err.message); });
MongoDB.once('open', function() {
  console.log("mongodb connection open");
});

Убедитесь, что mongod запущен во время запуска сервера. Вы используете Express или просто простой сервер node.js? Какое сообщение об ошибке вы получите с указанным выше кодом?

Ответ 4

очень странно, но в моем случае я переключаю Wi-Fi-соединение...

Я использую какой-то публичный Wi-Fi и переключаюсь на свое телефонное соединение

Ответ 5

У меня была такая же проблема. Это было разрешено путем запуска того же кода в Консоль администратора.

Ответ 6

Я столкнулся с такой же проблемой при написании простого сценария rest api с помощью node.js в конце концов выяснилось, что это связано с блокировкой Wi-Fi и соображениями безопасности. попробуйте один раз подключить его с помощью мобильной точки доступа. если это будет причиной его немедленного решения.

Ответ 7

Я была такая же проблема. Я mongodb команду mongodb в другом терминале. Затем запустите мое приложение на другой вкладке. Это решило мою проблему. Хотя я пытаюсь найти другое решение, например, создать скрипт для запуска mongodb перед установлением соединения.

Ответ 8

иногда вам необходимо проверить правильность IP-адреса, брандмауэра, переадресации портов и т.д., если ваша целевая база данных находится на других компьютерах.

Ответ 9

У меня была та же проблема, все, что я сделал, это добавил setTimeout примерно на 10 секунд, прежде чем пытаться подключиться к серверу Mongo, и это решило проблему прямо сейчас. Я не знаю, почему я должен был добавить задержку, но это сработало...