新手求解 - Nodejs 用connect-mongo 连接数据库的问题

新手求解 - Nodejs 用connect-mongo 连接数据库的问题

D:\NodeWorkSpace\misclog1>node app.js Express server listening on port 3000

D:\NodeWorkSpace\misclog1\node_modules\connect-mongo\lib\connect-mongo.js:153 throw new Error(‘Error connecting to database’); ^ Error: Error connecting to database at D:\NodeWorkSpace\misclog1\node_modules\connect-mongo\lib\connect-mongo.js :153:17 at D:\NodeWorkSpace\misclog1\node_modules\connect-mongo\node_modules\mongodb \lib\mongodb\db.js:229:16 at null.<anonymous> (D:\NodeWorkSpace\misclog1\node_modules\connect-mongo\no de_modules\mongodb\lib\mongodb\connection\server.js:578:7) at EventEmitter.emit (events.js:106:17) at null.<anonymous> (D:\NodeWorkSpace\misclog1\node_modules\connect-mongo\no de_modules\mongodb\lib\mongodb\connection\connection_pool.js:139:15) at EventEmitter.emit (events.js:98:17) at Socket.<anonymous> (D:\NodeWorkSpace\misclog1\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:426:14 at process._tickCallback (node.js:415:13)

按照开发指南一步一步做的,安装了mongodb 和connect-mongo 书上没说怎么建立数据库 就直接操作数据库了,我估计我连接不上也是数据库没建立,可我查了下,还不知道怎么建数据库(系统window7 ),是这个原因吗?怎么解决?麻烦下了大神。 难道是我的MongoDB 没安装?


5 回复

根据你描述的问题,错误信息表明你的应用无法连接到 MongoDB 数据库。这可能是由于几个原因导致的,包括但不限于 MongoDB 未正确安装、数据库未创建或配置文件中的数据库连接字符串不正确等。

首先确认 MongoDB 是否已正确安装并运行。你可以通过命令行工具启动 MongoDB 服务,确保其正常工作:

mongod --dbpath "C:\data\db"

如果这是首次运行 MongoDB,你需要确保 C:\data\db 目录存在,并且 MongoDB 服务有权限写入该目录。

接下来,确保你的 Node.js 应用正确配置了 MongoDB 的连接字符串。以下是一个简单的示例,展示如何使用 express-sessionconnect-mongo 在 Express 应用中设置会话存储到 MongoDB 中:

  1. 安装必要的依赖:
npm install express express-session connect-mongo mongodb
  1. 编辑你的 app.js 文件,添加以下代码:
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://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 设置会话中间件
app.use(session({
    secret: 'your_secret_key',
    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(3000, () => {
    console.log('Express server listening on port 3000');
});

确保将 'mongodb://localhost:27017/mydatabase' 替换为你实际的 MongoDB 连接字符串,其中 mydatabase 是你要使用的数据库名称。

如果你仍然遇到问题,可以检查 MongoDB 的日志文件以获取更多详细信息。此外,确保防火墙没有阻止 MongoDB 端口(默认为 27017)的访问。


没装的话坑肯定会报错… 或者运行数据库成功没有?

谢谢你!

从错误日志来看,问题在于无法连接到数据库。这可能是因为MongoDB没有正确运行或者数据库没有被创建。

首先,确保MongoDB已经正确安装并且正在运行。你可以通过命令行工具检查MongoDB是否已经启动。在命令提示符中输入以下命令来启动MongoDB服务:

mongod --dbpath "D:\NodeWorkSpace\misclog1\data"

如果你不确定数据存储路径,可以创建一个文件夹(例如data)并指定该路径。

其次,你需要确保在代码中正确配置了数据库连接信息。下面是一个使用express-sessionconnect-mongo的示例:

var express = require('express');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);
var app = express();

app.use(session({
    secret: 'secret-key',
    store: new MongoStore({
        url: 'mongodb://localhost:27017/session', // 替换为你的MongoDB URL
        autoReconnect: true,
        touchAfter: 24 * 3600 // session过期时间
    })
}));

app.get('/', function(req, res) {
    req.session.views = (req.session.views || 0) + 1;
    res.send('Views: ' + req.session.views);
});

app.listen(3000, function() {
    console.log('Server started on port 3000');
});

确保你已经创建了一个名为session的数据库,并且MongoDB实例正在监听localhost:27017端口。如果数据库不存在,connect-mongo会在首次访问时自动创建它。

如果你遇到连接问题,可以尝试手动创建数据库并验证MongoDB连接是否正常。如果一切正常但仍然无法连接,请检查防火墙设置和MongoDB的安全配置。

回到顶部