【求科普】Nodejs中express-mongoose与connect-mongo是什么关系?两者是否可以共用?

【求科普】Nodejs中express-mongoose与connect-mongo是什么关系?两者是否可以共用?

这个两个的关系我有迷惑。不知道有哪位大神能够讲讲,他们的应用场景或者作用。

4 回复

当然可以!让我们来探讨一下 express-mongooseconnect-mongo 在 Node.js 中的关系以及它们的应用场景。

express-mongoose

express-mongoose 并不是一个官方的库或模块,可能是指将 Express 框架与 Mongoose ORM(对象关系映射)结合使用的技术。Mongoose 是一个用于 MongoDB 的对象建模工具,它使得在 Node.js 中操作 MongoDB 更加方便。

connect-mongo

connect-mongo 是一个用于将 Session 存储到 MongoDB 中的中间件。它通常与 express-session 结合使用,以将用户会话持久化存储到 MongoDB 数据库中。

关系

  • express-mongoose:通常指的是使用 Mongoose 来操作 MongoDB 数据库。
  • connect-mongo:是一个专门用于将 Express 的 Session 存储到 MongoDB 的中间件。

是否可以共用?

是的,express-mongooseconnect-mongo 可以共用。你可以使用 Mongoose 来管理你的数据模型,并且同时使用 connect-mongo 将会话存储到 MongoDB 中。

示例代码

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

// 连接到 MongoDB
mongoose.connect('mongodb://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 定义一个简单的 Mongoose 模型
const UserSchema = new mongoose.Schema({
    username: String,
    password: String
});
const User = mongoose.model('User', UserSchema);

const app = express();

// 使用 express-session 和 connect-mongo
app.use(session({
    secret: 'your-secret-key',
    resave: false,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection })
}));

// 示例路由
app.get('/', (req, res) => {
    if (req.session.views) {
        req.session.views++;
        res.write(`<p>Views: ${req.session.views}</p>`);
    } else {
        req.session.views = 1;
        res.write('<p>Welcome to the session demo. Refresh!</p>');
    }
    res.end();
});

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

在这个示例中:

  1. 我们首先连接到 MongoDB 数据库。
  2. 然后定义了一个简单的 Mongoose 模型 User
  3. 使用 express-sessionconnect-mongo 将会话存储到 MongoDB 中。
  4. 最后,我们创建了一个简单的路由来展示会话功能。

希望这能帮助你理解 express-mongooseconnect-mongo 的关系及其应用场景!


express-mongoose 是 Adds Mongoose Query and Promise support to Express. connect-mongo 是 MongoDB session store for Connect 類似於 杯子蛋糕是 “简单原料的组合,但香醇的口味,和梦幻华丽的外型,让人一下子就坠入甜品的诱惑世界” ABS防抱死系統 是 “一种具有防滑、防锁死等优点的汽车安全控制系统”

你完全可以在有ABS防抱死系統的車子上吃杯子蛋糕

换个比喻好么。这个有点难理解。

express-mongooseconnect-mongo 是 Node.js 中用于处理数据库连接的不同中间件,但它们的功能和应用场景有所不同。

express-mongoose

express-mongoose 并不是一个实际存在的 npm 包。可能是指使用 Mongoose 连接 MongoDB 的方式。Mongoose 是一个对象建模工具,可以让你以更方便的方式与 MongoDB 数据库进行交互。通常我们会使用 Mongoose 来定义模型、进行数据验证等操作。

connect-mongo

connect-mongo 是一个专门用来将会话存储在 MongoDB 中的中间件。它依赖于 connectexpress-session,可以将 session 数据持久化到 MongoDB 数据库中,而不是存储在内存里。

示例代码

使用 Mongoose 连接 MongoDB

const mongoose = require('mongoose');

// 连接到 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

const userSchema = new mongoose.Schema({
    name: String,
    email: String
});

const User = mongoose.model('User', userSchema);

// 插入数据
const newUser = new User({ name: 'John Doe', email: 'john@example.com' });
newUser.save().then(() => console.log('Saved'));

使用 connect-mongo 存储 Express 会话

首先安装 connect-mongoexpress-session

npm install connect-mongo express-session

然后配置并使用:

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

mongoose.connect('mongodb://localhost:27017/mydatabase', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

const app = express();

app.use(session({
    secret: 'mysecretkey',
    resave: false,
    saveUninitialized: false,
    store: new MongoStore({ mongooseConnection: mongoose.connection })
}));

app.get('/', (req, res) => {
    if (!req.session.views) {
        req.session.views = 0;
    }
    req.session.views++;
    res.send(`Number of views: ${req.session.views}`);
});

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

总结

  • express-mongoose 不是一个实际存在的包,可能是用来描述使用 Mongoose 操作 MongoDB。
  • connect-mongo 用于将 Express 会话数据持久化存储到 MongoDB。
  • 它们可以在同一个项目中使用,但用途不同。
回到顶部