【求助】用Nodejs Express搭建的博客,能访问,但是经常出现以下问题,求助

【求助】用Nodejs Express搭建的博客,能访问,但是经常出现以下问题,求助

url: http://siblim.duapp.com/ Express 500 Error: no open connections at Db._executeQueryCommand (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1802:21) at Cursor.nextObject (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:729:13) at Cursor.nextObject (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/scope.js:22:20) at Collection.findOne (/home/bae/app/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/collection/query.js:145:10) at /home/bae/app/node_modules/connect-mongo/lib/connect-mongo.js:214:18 at MongoStore._get_collection (/home/bae/app/node_modules/connect-mongo/lib/connect-mongo.js:148:21) at MongoStore.get (/home/bae/app/node_modules/connect-mongo/lib/connect-mongo.js:213:10) at Object.session [as handle] (/home/bae/app/node_modules/express/node_modules/connect/node_modules/express-session/index.js:329:11) at next (/home/bae/app/node_modules/express/node_modules/connect/lib/proto.js:193:15) at Object.cookieParser [as handle] (/home/bae/app/node_modules/express/node_modules/connect/node_modules/cookie-parser/index.js:46:5)


10 回复

根据你提供的信息,错误提示表明你的应用在尝试连接MongoDB数据库时遇到了问题。具体来说,Error: no open connections 表明当前没有可用的数据库连接。这通常发生在数据库连接池配置不当或者数据库连接已经关闭但应用仍在尝试使用它。

可能的原因及解决方案

1. 数据库连接配置问题

确保你的应用正确地配置了与MongoDB的连接。通常情况下,你需要在启动服务器之前初始化数据库连接。

示例代码:

const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const app = express();

// MongoDB URI
const uri = 'mongodb://your_mongodb_uri_here';

// Initialize the database connection
let db;

MongoClient.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(client => {
    console.log('Connected to Database');
    db = client.db('your_database_name');
    // Start your server after the database connection is established
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
  })
  .catch(err => {
    console.error('Error connecting to MongoDB:', err);
  });

// Example route that uses the database
app.get('/', (req, res) => {
  db.collection('posts').find().toArray()
    .then(result => {
      res.send(result);
    })
    .catch(error => {
      console.error('Database error:', error);
      res.status(500).send('Internal Server Error');
    });
});

2. 连接池配置

如果你使用的是像 connect-mongo 这样的中间件来管理会话存储,确保配置了正确的连接池设置。例如:

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

app.use(session({
  store: new MongoStore({ 
    url: 'mongodb://your_mongodb_uri_here',
    autoReconnect: true,
    poolSize: 10 // 设置连接池大小
  }),
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: false
}));

3. 错误处理

确保你的应用有适当的错误处理机制。当数据库连接失败时,应该优雅地处理错误并返回友好的错误信息给用户。

app.use((err, req, res, next) => {
  console.error('Error:', err);
  res.status(500).send('An internal server error occurred.');
});

通过以上步骤,你应该能够解决由于数据库连接问题导致的 500 Internal Server Error。如果问题仍然存在,请检查日志文件或使用调试工具进一步分析错误原因。


mongodb没开吧

这明显是mongodb没有打开,请打开mongodb服务 命令行切换到mongodb bin文件夹, mongod.exe -dbpath e:\mongodb\yourDB

这是没有可用连接嘛。初始化了多大的连接数啊?

我用的是百度的MongoDB数据库啊

我用的是百度的MongoDB数据库,第一次能访问,再多刷新几次就出现这种情况

我搭建在了百度的开发者平台上了,不是在本地的MongoDB数据库

楼主济南的?

是的啊,你也是济南的?

根据你提供的错误信息,这个问题似乎与数据库连接有关。错误提示中提到的是 “Error: no open connections”,这表明你的应用尝试访问数据库时没有找到可用的连接。这可能是由于配置错误、连接池设置不当或者数据库服务不稳定等原因导致的。

这里提供一个简单的示例代码来帮助你处理数据库连接问题:

  1. 首先确保正确安装了 MongoDB Node.js 驱动:
npm install mongodb
  1. 然后在你的项目中配置数据库连接:
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const app = express();

// MongoDB 连接字符串
const url = 'mongodb://your_mongodb_connection_string';

let db;

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
    if (err) throw err;
    console.log("Connected successfully to the database");
    db = client.db('your_database_name');
});

app.use(express.json());

app.get('/', (req, res) => {
    db.collection('posts').findOne({}, (err, result) => {
        if (err) return res.status(500).send(err);
        res.send(result);
    });
});

app.listen(3000, () => console.log('App is running on port 3000'));

这段代码首先初始化了一个 Express 应用,并且在启动时连接到 MongoDB 数据库。每次请求 / 路由时,都会从 posts 集合中查询一条数据并返回给客户端。

为了更好地管理数据库连接,可以考虑使用连接池(如 Mongoose 或直接使用 MongoDB 驱动程序的连接池功能)。同时检查是否正确设置了环境变量或配置文件中的数据库连接字符串,以确保连接参数是正确的。

回到顶部