【问题标题】:Can't connect Mongodb to Node.js : throw er; // Unhandled 'error' event ^ Error: failed to connect to [undefined:27017]无法将 Mongodb 连接到 Node.js : throw er; // 未处理的“错误”事件 ^ 错误:无法连接到 [undefined:27017]
【发布时间】:2019-05-24 01:16:52
【问题描述】:

我正在尝试将 Mongoose 与我的 Node.js 连接,但它总是显示此错误。我正在按照this 教程创建身份验证系统。在编写 server.js 文件并尝试修复 routes.js 中的问题后,出现错误,不知道为什么,请帮助。

这是我的代码和错误:

server.js

// server.js

// set up ======================================================================
// get all the tools we need
var express  = require('express');
var app      = express();
var port     = process.env.PORT || 8080;
var mongoose = require('mongoose');
var passport = require('passport');
var flash    = require('connect-flash');

var morgan       = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser   = require('body-parser');
var session      = require('express-session');

var configDB = require('./config/database.js');

// configuration ===============================================================
mongoose.connect(configDB.url); // connect to our database

// require('./config/passport')(passport); // pass passport for configuration

// set up our express application
app.use(morgan('dev')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser()); // get information from html forms

app.set('view engine', 'ejs'); // set up ejs for templating

// required for passport
app.use(session({ secret: 'ilovescotchscotchyscotchscotch' })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session

// routes ======================================================================
require('./app/routes.js')(app, passport); // load our routes and pass in our app and fully configured passport

// launch ======================================================================
app.listen(port);
console.log('The magic happens on port ' + port);

routes.js:

module.exports = function(app, passport) {
    //...
};

package.json

{
  "name": "node-authentication",
  "main": "server.js",
  "dependencies" : {
    "express" : "~4.0.0",
    "ejs" : "~0.8.5",
    "mongoose" : "~3.8.1",
    "passport" : "~0.1.17",
    "passport-local" : "~0.1.6",
    "passport-facebook" : "~1.0.2",
    "passport-twitter" : "~1.0.2",
    "passport-google-oauth" : "~0.1.5",
    "connect-flash" : "~0.1.1",
    "bcrypt-nodejs" : "latest",

    "morgan": "~1.0.0",
    "body-parser": "~1.0.0",
    "cookie-parser": "~1.0.0",
    "method-override": "~1.0.0",
    "express-session": "~1.0.0"
  }
}
database.js

// config/database.js
module.exports = {

    'url' : 'your-settings-here' // looks like mongodb://<user>:<pass>@mongo.onmodulus.net:27017/Mikha4ot

};

错误

The magic happens on port 8080
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: failed to connect to [undefined:27017]
    at null.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ouestcharlie/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:556:25)
    at emitThree (events.js:97:13)
    at emit (events.js:175:7)
    at null.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ouestcharlie/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:156:15)
    at emitTwo (events.js:87:13)
    at emit (events.js:172:7)
    at Socket.<anonymous> (/Applications/XAMPP/xamppfiles/htdocs/ouestcharlie/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:534:10)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at connectErrorNT (net.js:996:8)
    at nextTickCallbackWith2Args (node.js:442:9)
    at process._tickCallback (node.js:356:17)

【问题讨论】:

  • './config/database.js' 里面是什么?请问可以分享一下文件吗?
  • 该文件暂时为空。他们在命令“node server.js”运行良好后填充它。
  • 您正在使用此文件连接到 MongoDB。因此,当文件为空时,JSON 文件中没有 url 属性,因此在连接到 MongoDB 时会出错。你确定文件是空的吗?
  • 对不起,这里是 database.js 的代码 // config/database.js module.exports = { 'url' : 'your-settings-here' // 看起来像 mongodb:/ /:@mongo.onmodulus.net:27017/Mikha4ot };
  • 你可以使用 Mongo shell 连接到数据库吗? docs.mongodb.com/manual/reference/program/mongo

标签: javascript node.js mongodb rest


【解决方案1】:

Mongoose.connect() 需要以下格式的参数:

"mongodb://&lt;hostname&gt;/&lt;databasename&gt;"

相反,它获取的是您在 database.js 中配置的内容,如下所示:

"your-settings-here"

我猜这是不对的。只需在database.js中填写一个像样的连接url,例如:“mongodb://localhost/my-test-db”(请替换为合适的值),这个错误就会消失。

【讨论】:

  • 我将 'your-settings-here' 替换为 'mongodb://127.0.0.1:8080/test' 我认为是正确的,但发生了同样的错误。
  • 错误是否完全一样?还指[未定义:27017]?相同的行号一切?另外,您确定端口号吗?似乎默认端口号是 27017,如果这是您正在使用的端口,您可以将其省略。端口 8080 几乎肯定是错误的,因为您的应用程序(不是 MongoDB)已经在 8080 上运行 - 您在 localhost 上运行 mongodb 对吗?
  • 不,现在我有“错误:连接已关闭”。是的,我在 localhost 上运行 mongodb
  • 可能是身份验证问题?正如 ThomasBormans 之前所建议的,您可以尝试使用 MongoDB shell 来确认您的连接信息是否正确吗? - docs.mongodb.com/manual/reference/program/mongo
  • 我尝试运行“mongo --shell”或“c​​d ”(用于安装”),我收到此消息:“bash: mongo: command not found”
【解决方案2】:

这是连接在默认端口 (27017) 上本地运行的 myapp 数据库所需的最低要求。如果本地连接失败,请尝试使用 127.0.0.1 而不是 localhost。当本地主机名已更改时,有时可能会出现问题。 [来源:http://mongoosejs.com/docs/connections.html]

我有同样的错误。我重新安装了 mongoDB,但它没有工作。

我通过使用以下 url 连接到 localhost 解决了我的问题。 mongoose.connect('mongodb://127.0.0.1:27017/database-name');

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多