mongoose ES6 -如何导入connect-mongo(会话)?

lf3rwulv  于 2022-11-13  发布在  Go
关注(0)|答案(7)|浏览(164)

在ES6之前的版本中,我是这样导入connect-mongo(会话)的:

var MongoStore = require("connect-mongo")(session);

但是如何在ES6中导入它呢?

import MongoStore from 'connect-mongo';
let monStore = MongoStore(session);

错误:

const Store = connect.Store || connect.session.Store;
                                                  ^

TypeError: Cannot read property 'Store' of undefined

有什么想法吗?

vd2z7a6w

vd2z7a6w1#

使用非常类似的connect-mongodb-session,您可以:

import { default as connectMongoDBSession} from 'connect-mongodb-session';

const MongoDBStore = connectMongoDBSession(session);

var store = new MongoDBStore({
  uri: 'mongodb://localhost:27017/tmp',
  collection: 'sessions'
});

两个软件包(connect-mongodb-sessionconnect-mongo)都导出了一个匿名函数,该函数将express-session模块作为参数。此函数返回一个 * 构造函数 *,并使用modules.export导出,因此它被视为默认导出,您可以使用import { default as NameForAnonymousFunction } from 'connect-mongo'导入它。
现在,我认为您应该遵循的一个好的学习实践是尝试阅读您正在安装的包的实际代码,至少是index.js

由于connect-mongo使用mongodb@2.2.36,而connect-mongodb-session使用mongodb@3.0.11,因此我在connect-mongo之前添加了一个过时的标记

des4xlb0

des4xlb02#

您可以尝试如下导入:

import * as connectMongo from 'connect-mongo';

const MongoStore = connectMongo(session);

来自MDN文档
导入整个模块的内容。这会将myModule插入到当前作用域中,其中包含所有从“my-module.js”导出的绑定。
import * as myModule from "my-module";
More information can be found here.

rqqzpn5f

rqqzpn5f3#

使用会话文件存储进行测试,方法如下:

import expressSession from 'express-session';
import sessionFileStore from 'session-file-store';
const FileStore = sessionFileStore(expressSession);

对于connect-mongo,应该这样工作:

import session from 'express-session';
import connectMongo from 'connect-mongo'; 
const MongoStore = connectMongo(session);
tquggr8v

tquggr8v4#

我在NestJ/Express上工作时也遇到过同样的导入和初始化问题。这段代码与我的typescript代码库配合得很好。

import * as session from 'express-session';
import * as connectMongoDBSession from 'connect-mongodb-session';
const MongoDBStore = connectMongoDBSession(session);

const store = new MongoDBStore({
    uri: 'YOUR MONGO URL',
    collection: 'sessions',
  });

// set express middleware
app.use(
    session({
      // Other options here
      store: store,
    }),
);
7uzetpgm

7uzetpgm5#

下面的代码对我工作,我使用es7,与巴别塔.

import connectMongo from 'connect-mongo';

const MongoStore = connectMongo(session);
gev0vcfq

gev0vcfq6#

对我有效

//requires
    const mongoose = require("mongoose");
    const session = require("express-session");
    const MongoSotre = require("connect-mongo")(session);
    // Session Middleware
    app.use(
        session({
           secret: "secret",
           resave: false,
           saveUninitialized: false,
           store: new MongoSotre({ uri: 'YOUR MONGO URI',collection: 'sessions'}),
           })
     );
jm81lzqq

jm81lzqq7#

在这种情况下,服务器已经知道它以创建会话
请尝试以下代码:

const ConnectMongo = require('connect-mongo');
const app = express();

app.use(session({
    secret: 'Your Secret',
    store: new ConnectMongo({client: require('./db')}),

相关问题