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 '.'
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
})
}));
解释
- 完整连接字符串:
settings.db_url
包含了完整的 MongoDB 连接字符串,包括用户名、密码、主机地址、端口和数据库名称。 - 使用
url
选项:通过将完整的连接字符串传递给MongoStore
的url
选项,可以解决数据库名称中不能包含特定字符(如.
)的问题。 - 避免错误:这样设置后,
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-session
和 connect-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;
解释
-
url
属性:这是连接到 MongoDB 数据库的完整 URL,包含用户名、密码、主机名、端口和数据库名称。 -
dbName
属性:如果你不想在url
中指定数据库名称,可以单独通过dbName
来设置。 -
错误信息:原始错误提示是因为 MongoDB 不允许数据库名称中包含字符
.
,因此直接将连接字符串中的数据库名称部分传递给db
属性会导致错误。 -
避免使用
db
属性:connect-mongo
推荐使用url
和dbName
属性来设置 MongoDB 的连接信息。
通过这种方式,你可以确保在 VPS 上也能正确连接到 MongoDB 数据库。