Nodejs 上MongoStore 中db不能设置完整连接字符串,放在vps上连接不上mongodb

Nodejs 上MongoStore 中db不能设置完整连接字符串,放在vps上连接不上mongodb

    app.use(express.session({
secret: settings.cookie_secret,
store: new MongoStore({
db: settings.db
})
}));

在本地测试,这个 settting.db设置成 数据库名字 比如test是可以通过的,但是放到vps,vps上的数据库一个完整的连接串,写完整了提示

                                                          ^
Error: database names cannot contain the character '.'

3 回复

Node.js 上 MongoStore 中 db 不能设置完整连接字符串,放在 VPS 上连接不上 MongoDB

问题描述

在使用 Node.js 和 express-session 模块结合 connect-mongo 库来存储会话数据时,遇到了一个问题。当在本地开发环境中设置 settings.db 只包含数据库名称(例如 test)时,一切正常。但将应用部署到 VPS 后,需要使用完整的 MongoDB 连接字符串(如 mongodb://username:password@host:port/database),却发现无法连接到 MongoDB 数据库,并且出现了以下错误:

Error: database names cannot contain the character '.'

解决方案

为了解决这个问题,我们需要将完整的 MongoDB 连接字符串传递给 MongoStore,而不是仅仅传递数据库名称。这可以通过使用 url 选项来实现。

以下是修改后的代码示例:

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

// 设置完整的 MongoDB 连接字符串
const settings = {
  cookie_secret: 'your_cookie_secret',
  db_url: 'mongodb://username:password@host:port/database'
};

app.use(session({
  secret: settings.cookie_secret,
  store: new MongoStore({
    url: settings.db_url
  })
}));

解释

  1. 完整连接字符串settings.db_url 包含了完整的 MongoDB 连接字符串,包括用户名、密码、主机地址、端口和数据库名称。
  2. 使用 url 选项:通过将完整的连接字符串传递给 MongoStoreurl 选项,可以解决数据库名称中不能包含特定字符(如 .)的问题。
  3. 避免错误:这样设置后,MongoStore 将直接使用该连接字符串连接到 MongoDB,避免了由于数据库名称格式不正确导致的错误。

通过这种方式,你可以确保在 VPS 上也能成功连接到 MongoDB 数据库,并且不会遇到之前提到的错误。


折腾了一上午 禁了MemoryStore就可以了 原来是vps不能用这货

Warning: connection.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
Express server listening on port 8080

在使用 express-sessionconnect-mongo 这样的库时,如果尝试将完整的 MongoDB 连接字符串传递给 db 属性,可能会遇到问题。正确的做法是分别设置连接字符串、数据库名称等属性。以下是如何正确配置 MongoStore 的示例代码:

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

const app = express();

app.use(session({
  secret: settings.cookie_secret,
  store: MongoStore.create({
    url: 'mongodb://username:password@host:port/database',
    // 或者分开设置
    // url: 'mongodb://host:port', 
    // dbName: 'database'
  }),
}));

module.exports = app;

解释

  1. url 属性:这是连接到 MongoDB 数据库的完整 URL,包含用户名、密码、主机名、端口和数据库名称。

  2. dbName 属性:如果你不想在 url 中指定数据库名称,可以单独通过 dbName 来设置。

  3. 错误信息:原始错误提示是因为 MongoDB 不允许数据库名称中包含字符 .,因此直接将连接字符串中的数据库名称部分传递给 db 属性会导致错误。

  4. 避免使用 db 属性connect-mongo 推荐使用 urldbName 属性来设置 MongoDB 的连接信息。

通过这种方式,你可以确保在 VPS 上也能正确连接到 MongoDB 数据库。

回到顶部