【求救】Nodejs - http://siblim.duapp.com/ 一直出现以下错误

【求救】Nodejs - 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)


4 回复

从你提供的错误信息来看,问题出在与MongoDB数据库的连接上。错误提示为 Error: no open connections,这意味着你的Node.js应用尝试访问数据库时,无法找到已打开的数据库连接。

可能的原因:

  1. 数据库连接配置错误:可能是在配置文件中,数据库连接字符串不正确。
  2. 数据库服务未启动:可能是MongoDB服务器没有运行。
  3. 网络问题:如果MongoDB部署在远程服务器上,可能存在网络连接问题。

解决方案:

1. 检查数据库连接配置

确保你的数据库连接字符串(URL)是正确的。通常这个配置可以在环境变量或者配置文件中找到。

const mongoose = require('mongoose');
mongoose.connect('mongodb://your_mongodb_connection_string', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

2. 确保MongoDB服务正在运行

确保MongoDB服务已经启动并且可以被应用访问到。你可以通过命令行工具检查MongoDB服务状态,例如:

sudo service mongod status

或者直接尝试连接到MongoDB实例来验证:

mongoose.connection.on('open', () => {
    console.log('Connected to MongoDB');
});

mongoose.connection.on('error', (err) => {
    console.error('MongoDB connection error:', err);
});

3. 检查网络连接

如果你的应用部署在远程服务器上,并且MongoDB也在远程服务器上,确保两者的网络是可以互通的。你可以尝试ping对方服务器或使用telnet测试端口连通性。

示例代码:

这里是一个简单的Express应用示例,包括了MongoDB的连接配置:

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

const app = express();

// 配置MongoDB连接
mongoose.connect('mongodb://your_mongodb_connection_string', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));

// 使用Session中间件
app.use(session({
    store: new MongoStore({ mongooseConnection: db }),
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: false
}));

app.get('/', (req, res) => {
    res.send('Hello World!');
});

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

通过上述步骤,你应该能够解决no open connections的问题。如果问题仍然存在,请检查具体的错误日志以获取更多线索。


数据库服务没开吧

no open connections 这个不是说的很明白么

从你提供的错误信息来看,问题出在与MongoDB数据库连接失败。错误信息Error: no open connections表明你的应用无法建立到MongoDB数据库的有效连接。

这种情况可能由多种原因造成,包括但不限于:

  1. 数据库连接字符串配置错误。
  2. MongoDB服务未运行或网络不可达。
  3. 数据库权限问题。

这里提供一个简单的示例来检查和确保你的MongoDB连接配置正确,并且尝试建立连接。你可以将此代码片段添加到你的应用启动逻辑中进行测试:

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

const url = 'mongodb://<your_mongodb_username>:<your_mongodb_password>@ds123456.mlab.com:27017/<your_database_name>';

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => {
    if (err) {
        console.error('Failed to connect to MongoDB:', err);
    } else {
        console.log('Connected successfully to MongoDB');
        // 确保在此处关闭连接以避免内存泄漏
        client.close();
    }
});

请确保将url中的占位符替换为实际的MongoDB用户名、密码、主机名和数据库名称。

如果上述步骤不能解决问题,建议检查数据库服务的状态,确认网络可达性,以及验证数据库访问凭证是否正确。

回到顶部