2013-12-04 4 views
29

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

Я установил 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) 
+3

Попробуйте передать порт по умолчанию в URL-адрес соединения: «mongodb: // localhost: 27017/test» –

+1

Это может быть проблема с конфликтом портов. Если мы попытаемся запустить сервер узла во второй раз с одним и тем же портом, то такая же ошибка будет Приходят – shanmugharaj

+1

Хорошие идеи оба. Однако я попытался отключить любые существующие подключения к mongodb и добавить порт безрезультатно. – agoldencom

ответ

7

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

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

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

7

Используйте этот код для установки подключения 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? Какое сообщение об ошибке вы получите с вышеуказанным кодом?

+1

К сожалению, я получаю ту же ошибку, используя приведенный выше код. Mongod определенно работает, так как я могу просмотреть веб-страницу mongod по адресу http: // localhost: 28017 /. Я noob, поэтому я не совсем уверен, но я прошел процесс установки для node.js, и я запускаю сервер, набрав «node app.js» в терминале, поэтому я считаю, что я запускаю простой сервер node.js. – agoldencom

+4

ECONNREFUSED обычно означает, что либо mongo не работает, либо ваше приложение не может получить доступ к порту, на котором он запущен. Вы можете получить доступ к http: // localhost: 27017 /? – Xinzz

+1

Я могу получить доступ к localhost: 27017, используя монго с терминала. Я могу получить доступ к localhost: 28017 из веб-браузера. mongod определенно работает, и на этом порту! – agoldencom

11

ECONNREFUSED ошибки

Есть несколько причин этой ошибки в узле:

  1. Вашего порт уже служат некоторые услуги, так что откажет соединение.

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

    $ lsof -i:port_number

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

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

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

    $ mongod

  3. Существует также возможность вашей localhost не настроен должным образом, использовать 127.0.0.1:27017 вместо локального хоста.

+4

Проблема для меня заключалась в том, что мой местный монгон не работал. Моя машина разбилась раньше, и я забыл запустить ее. Спасибо за Ваш ответ! Я дал ему голосование. – ttemple

1

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

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

2

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

0

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

Смежные вопросы