【问题标题】:cannot connect to mongo local DB from Node JS无法从 Node JS 连接到 mongo 本地数据库
【发布时间】:2017-11-09 05:29:11
【问题描述】:

我正在学习 Mongo DB、Mongoose 和 Node JS,但我似乎无法将我的 Node JS 连接到本地 Mongo DB。

这是我的代码:

dbtest.js

    var express  = require('express');
    var app      = express();                               // create our app w/ express
    var mongoose = require('mongoose');                     // mongoose for mongodb
    var morgan = require('morgan');             // log requests to the console (express4)
    var bodyParser = require('body-parser');    // pull information from HTML POST (express4)
    var methodOverride = require('method-override'); // simulate DELETE and PUT (express4)

    var options = {
          useMongoClient: true,
          autoIndex: false, // Don't build indexes
          reconnectTries: Number.MAX_VALUE, // Never stop trying to reconnect
          reconnectInterval: 500, // Reconnect every 500ms
          poolSize: 10, // Maintain up to 10 socket connections
          // If not connected, return errors immediately rather than waiting for reconnect
          bufferMaxEntries: 0
};



    var Todo = mongoose.model('Todo', {
        text : String
    }, 'test');

    var status = {
    "status": "not connected"
    };

    app.get('/api/todos', function(req, res) {

            mongoose.connect('mongodb://127.0.0.1:27017/exampleDB',options,function(err)
    {
              if (err) {
              res.json(status);
            } else {
                res.json('Connected');
            }    
    });  
    });

    app.listen(8080);
    console.log("App listening on port 8080");

当我调用 api/todos GET 请求时,返回状态 JSON 对象,这意味着我无法连接到数据库。

我完全安装了 MongoDB Enterprise Server 3.14.10 并运行它,但我不知道为什么我的 NodeJS 应用程序无法连接。

欢迎提出任何建议。

【问题讨论】:

  • 然后res.json({ err }) 而不是你的res.json(status) 并实际查看错误是什么。
  • 这是根据您的评论更改代码后的错误:{"err":{"state":2}}
  • 添加console.log(err),该输出将显示在控制台上。将“文本”(不是屏幕截图)粘贴到您的问题中。将比您告诉任何人的内容更详细。
  • 消息是:“错误:试图打开一个未关闭的连接。”然后是很多堆栈跟踪。

标签: javascript json node.js mongodb


【解决方案1】:

您的第一个 mongoose.connect() 参数缺少用户名/密码组合:

mongoose.connect('mongodb://username:password@127.0.0.1:27017/exampleDB');

【讨论】:

  • 我实际上可以在不提供用户名和密码的情况下连接到 MongoDB 指南针,所以我想知道这里可能出了什么问题。
【解决方案2】:

在执行任何操作之前先尝试连接数据库。连接后,尝试在您的自定义函数中使用。下面的代码将帮助您测试本地数据库

const express = require('express');
const app = express();
const port = 3000;
const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/dbname', { useMongoClient: true });
mongoose.connection.on('connected', () => {
  console.log('Connected to database ');
}); 
mongoose.connection.on('error', (err) => {
  console.log('Database error: '+err);
});


// Start Server
app.listen(port, () => {
  console.log('Server started on port '+port);
});

检查您的 cmd 窗口以查看控制台。

【讨论】:

  • 对于本地数据库,MongoDB compass 默认使用默认端口,无需用户名和密码即可接受;对于您必须提供的其他数据库
  • 在单独的 js 文件中尝试了您的代码,但它只返回了服务器启动日志。没有登录“已连接”或“错误”。
【解决方案3】:

要连接到本地 mongodb,您可以使用此 URI,用您的值替换 USER、PASSWORD 是 DB:

mongodb://USER:PASSWORD@127.0.0.1/DB?authSource=admin

你不需要提供 27017 端口,因为它是 mongodb 的默认端口。

这里的技巧是添加 'authSource=admin' 以启用身份验证。

文档: https://docs.mongodb.com/manual/reference/connection-string/#examples

【讨论】:

    猜你喜欢
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多