Nodejs BAE mongodb连接不上,各项设置都设置了,本地能跑

Nodejs BAE mongodb连接不上,各项设置都设置了,本地能跑

cookieSecret: ‘joexxx’, db: ‘MxUxJOzxElxxSPxxxUhtxxdz’, host: ‘mongo.duapp.com’, port : “8908”, username:‘4nx5SxxxxxxxxxxxxxxxxC’, password:‘l9kxdxeixtRxy47xxxxxxxx’

高手帮忙分析下,谢谢

Error Message is

/home/bae/app/node_modules/connect-mongo/lib/connect-mongo.js:155 throw new Error(‘Error connecting to database <’ + err + ‘>’); ^ Error: Error connecting to database at /home/bae/app/node_modules/connect-mongo/lib/connect-mongo.js:155:17 at /home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:229:16 at null. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/server.js:578:7) at EventEmitter.emit (events.js:106:17) at null. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:139:15) at EventEmitter.emit (events.js:98:17) at Socket. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection.js:475:10) at Socket.EventEmitter.emit (events.js:95:17) at net.js:441:14 at process._tickCallback (node.js:415:13) [Thu Feb 27 2014 23:40:48][Thu Feb 27 2014 23:40:48]Express server listening on port 18080


8 回复

根据你提供的信息,你的 Node.js 应用在使用 BAE(百度应用引擎)时无法连接到 MongoDB 数据库。错误信息表明数据库连接失败,但本地环境没有问题。以下是一些可能的原因和解决方案:

可能的原因

  1. 网络问题:BAE 环境下的网络配置可能与本地不同,导致无法访问远程 MongoDB。
  2. 认证问题:用户名和密码可能不正确或格式有误。
  3. MongoDB URI格式:MongoDB 的连接字符串可能需要特定的格式。

解决方案

检查网络配置

确保你的 BAE 环境允许访问 mongo.duapp.com。你可以尝试使用 telnetcurl 来检查是否可以访问该域名。

telnet mongo.duapp.com 8908

验证凭证

确保你的用户名和密码正确,并且没有多余的空格或其他字符。

const username = '4nx5SxxxxxxxxxxxxxxxxC';
const password = 'l9kxdxeixtRxy47xxxxxxxx';

使用正确的 MongoDB URI

建议直接使用 MongoDB URI 连接字符串,这样更简洁且不容易出错。

const mongoose = require('mongoose');
const uri = 'mongodb://username:password@mongo.duapp.com:8908';

mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('Connected to MongoDB'))
  .catch(err => console.error('Failed to connect to MongoDB', err));

示例代码

假设你已经安装了 mongooseconnect-mongo,你可以将上述配置整合到你的 Node.js 应用中。

const express = require('express');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const mongoose = require('mongoose');

const app = express();

// MongoDB URI
const uri = 'mongodb://4nx5SxxxxxxxxxxxxxxxxC:l9kxdxeixtRxy47xxxxxxxx@mongo.duapp.com:8908';

// Connect to MongoDB
mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => console.log('Connected to MongoDB'))
  .catch(err => console.error('Failed to connect to MongoDB', err));

// Session configuration
app.use(session({
  secret: 'joexxx',
  resave: false,
  saveUninitialized: false,
  store: new MongoStore({ mongooseConnection: mongoose.connection })
}));

app.get('/', (req, res) => {
  req.session.views = (req.session.views || 0) + 1;
  res.send(`You have viewed this page ${req.session.views} times.`);
});

app.listen(18080, () => console.log('Server running on port 18080'));

通过以上步骤,你应该能够解决 Node.js 在 BAE 环境中连接 MongoDB 的问题。如果仍然有问题,请检查日志并确保所有配置都正确无误。


这个不是因为mongo长连接的问题吗

同遇到这个问题,如果修改掉长连接呢? 楼主解决了吗?分享下

同问,这是咋地啦,本地都运行良好 Error: Error connecting to database: failed to connect to [127.0.0.1:27017] at null. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/server.js:553:74) at EventEmitter.emit (events.js:106:17) at null. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:140:15) at EventEmitter.emit (events.js:98:17) at Socket. (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/connection/connection.js:512:10) at Socket.EventEmitter.emit (events.js:95:17) at net.js:441:14 at process._tickCallback (node.js:415:13)

bae收钱么?

收钱,2毛一天

根据你提供的信息,看起来你在BAE平台上遇到了MongoDB连接问题。BAE(百度应用引擎)可能有一些特定的网络或安全配置,这可能导致与MongoDB的连接失败。

分析

  1. 网络问题:BAE平台可能需要特定的网络设置才能访问外部服务,如MongoDB。
  2. 防火墙/安全组规则:BAE平台上的实例可能受到严格的防火墙或安全组规则限制,阻止外部数据库访问。
  3. 配置错误:确保所有配置参数正确无误,包括hostportusernamepassword

示例代码

首先,确保你的连接字符串是正确的,并且包含了所有必要的认证信息。以下是一个连接到MongoDB的基本示例:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://" + encodeURIComponent('4nx5SxxxxxxxxxxxxxxxxC') + ":" +
          encodeURIComponent('l9kxdxeixtRxy47xxxxxxxx') + "@" +
          encodeURIComponent('mongo.duapp.com') + ":" + 
          "8908" + "/" + encodeURIComponent('your-db-name');

MongoClient.connect(url, function(err, db) {
    if (err) {
        console.error("Error connecting to MongoDB:", err);
        return;
    }
    console.log("Connected to MongoDB!");
    // 在这里进行数据库操作
    db.close();
});

检查步骤

  1. 检查网络配置:确保BAE平台的实例可以访问mongo.duapp.com
  2. 检查防火墙/安全组规则:确认没有防火墙规则阻止BAE实例与MongoDB服务器之间的通信。
  3. 日志和错误信息:仔细查看错误信息中的具体内容,尤其是err对象的内容,这可能会提供更多线索。

如果以上方法都无法解决问题,建议联系BAE平台的技术支持团队,询问是否有特殊的网络或安全设置需要配置。

回到顶部