Mac:节点JS Mongo数据库错误:拒绝连接

时间:2016-05-30 14:34:35

标签: javascript node.js macos mongodb mongoose

我正在按照here找到的教程。但是我收到以下错误:

Unable to connect to the mongoDB server. Error: { [MongoError: connect ECONNREFUSED 127.0.0.1:27017]
name: 'MongoError',
message: 'connect ECONNREFUSED 127.0.0.1:27017' }

我已使用找到的here命令验证了返回1:

ps -ef | grep mongod | grep -v grep | wc -l | tr -d ' '

我也跑了

ps -ef | grep mongod

并收到以下内容:

0  4165   418   0 Fri12pm ttys000    0:00.03 sudo mongod
501  6165   418   0  9:54am ttys000    0:00.00 grep mongod

我试图运行的javascript文件如下:

var fs = require('fs');
var http = require("https");
var express = require('express');
var app = express();
var path = require('path');
var http = require("http");
var url = require("url");
var req = require('request')
var pem = require('pem');
var cors = require("cors");
var mongodb = require('mongodb').MongoClient;
var url = 'mongodb://127.0.0.1:27017/Rewards';

// Use connect method to connect to the Server
mongodb.connect(url, function (err, db) { 
if (err) {
  console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
  //HURRAY!! We are connected. :)
  console.log('Connection established to', url);

  // do some work here with the database.

  //Close connection
  db.close();
  }
});

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With,  Content-Type, Accept");
  next();
});

app.use(express.static(path.join(__dirname, '../')));
app.listen(process.env.PORT || 8080);
app.options('*', cors()); 

app.all('/*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "http://localhost:8080");
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
  res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type");
  next();
});

app.get('/', function (req, res) { 
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
  res.writeHead(200, {'Content-Type': 'text/plain'});
  contents = fs.readFileSync("sliderImages.json", "utf8");
  console.log(path.join(__dirname, '/sliderImages.json'));
 res.end(contents);

});

我尝试过的事情:

  1. 重新启动服务
  2. 将端口号从27017更改为其他
  3. 取出代码以便验证
  4. This links information
  5. This links information
  6. This links information
  7. 我是Node JS和Mongo DB的新手,所以试图调试它有点困难。我已经在StackOverflow上和其他相关帖子中尝试过很多东西,但似乎无法弄清楚为什么我会收到此错误。

    我在阅读Mongo DB时需要安装以下内容:

    1. mongodb的核
    2. BSON
    3. 的Kerberos
    4. 节点-GYP
    5. 以及:

      1. 猫鼬
      2. 蒙戈
      3. 节点
      4. 我发布了我的代码;也许一个更了解这些的更好的开发人员可以向我解释究竟发生了什么以及为什么会出现这个问题。我从源代码中读到了我无法找到的链接,因为一些关键问题,例如没有关闭数据库连接,没有数据库,Mongo没有运行以及其他一些问题。

        进入Mongod:

        2016-05-31T11:18:44.936-0400 I CONTROL  [initandlisten] MongoDB starting : pid=10385 port=27017 dbpath=/data/db 64-bit host=RBCs-MacBook-    Pro-3.local
        2016-05-31T11:18:44.936-0400 I CONTROL  [initandlisten] db version v3.2.6
        2016-05-31T11:18:44.936-0400 I CONTROL  [initandlisten] git version: 05552b562c7a0b3143a729aaa0838e558dc49b25
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2h  3 May 2016
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten] allocator: system
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten] modules: none
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten] build environment:
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten]     distarch: x86_64
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten]     target_arch: x86_64
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten] options: {}
        2016-05-31T11:18:44.937-0400 I -        [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting  the active storage engine to 'wiredTiger'.
        2016-05-31T11:18:44.937-0400 W -        [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty.
        2016-05-31T11:18:44.937-0400 I STORAGE  [initandlisten] exception in initAndListen: 98 Unable to create/open lock file: /data/db/mongod.lock   errno:13 Permission denied Is a mongod instance already running?,  terminating
        2016-05-31T11:18:44.937-0400 I CONTROL  [initandlisten] dbexit:  rc: 100
        

3 个答案:

答案 0 :(得分:2)

您对NPM上可用的Mongodb驱动程序以及可以在mongodb.com上安装的Mongodb服务感到有点困惑

您在其网站上安装的mongodb服务用于创建mongodb实例,该实例将实际保存和存储您的数据记录。如果你有一个RDBMS背景,它与localdb / expressdb相同。

通过brew包管理器安装他们提供的mongodb服务 - 类似于NPM但支持不同的库。首先安装brew,然后按照Mongodb网站上的说明进行操作,其中的链接位于http://brew.sh/

一旦安装了MongoDB实例并设置了路径变量,您就可以在打开任何终端窗口后运行mongodb命令和mongo命令。

这将启动您的mongodb服务

brew services start mongodb

这将结束你的mongodb服务

brew services end mongodb

您从NPM安装的mongodb只是一个公共API /驱动程序,允许您与已安装的服务进行交互。在连接到节点项目时运行节点项目时,必须打开运行mongodb的终端。

注意:(关于您安装的软件包。) 你不需要猫鼬,如果你使用mongodb - mongoose是建立在mongodb之上,强制架构的东西,而且更笨重。我建议先添加mongodb,然后再添加另一层来学习。

答案 1 :(得分:0)

使用YOSEMITE 10.10.5

我遇到了同样的问题,并且以这种方式解决了。

  • 首先卸载任何mongodb版本...阅读文档,我已安装了当前的mongodb版本(4.2),并且YOSEMITE不支持该版本;
  • 安装版本3.6

brew install mongodb-community@3.6

  • 安装结束后说:对于启动mongodb,“ brew服务启动mongodb/brew/mongodb-community@3.6”,因此请使用此命令启动mongo

最后mongodb启动并从node.js进行连接!

答案 2 :(得分:0)

在终端输入这个命令:

var subject1 = PassthroughSubject<Int, Never>()
var subject2 = PassthroughSubject<String, Never>()

let bufferedSubject1 = Publishers.Concatenate(prefix: Publishers.PrefixUntilOutput(upstream: subject1, other: subject2).collect().flatMap(\.publisher),
                                      suffix: subject1)

let bufferedSubject2 = Publishers.Concatenate(prefix: Publishers.PrefixUntilOutput(upstream: subject2, other: subject1).collect().flatMap(\.publisher),
                                      suffix: subject2)

let cancel = bufferedSubject1.combineLatest(subject2)
    .sink(receiveCompletion: { c in
        print(c)
    }, receiveValue: { v in
        print(v)
    })

subject1.send(1)
subject1.send(2)
subject2.send("X")
subject2.send(completion: .finished)
subject1.send(3)
subject1.send(completion: .finished)