【问题标题】:Express mysql session store with Typescript使用 Typescript 表达 mysql 会话存储
【发布时间】:2021-12-04 16:54:17
【问题描述】:

我正在尝试使用 Typescript 在 NestJS 中创建一个 mysql 会话存储。我已经安装了 express-session、express-mysql-session 和 @types/express-mysql-session 包。下面的代码可以编译(main.ts 文件),但是控制台报错:

import { AppModule } from "./app.module";
import { env } from "./common/env";
import session from "express-session";
import MySQLStore from "express-mysql-session";

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    cors: { credentials: env.ENABLE_CORS, origin: env.CLIENT_HOST },
  });

  //session store
  const options = {
    host: "db",
    port: 3306,
    user: env.DB_USER,
    password: env.DB_PASSWD,
    database: env.DATABASE,
    checkExpirationInterval: 1000 * 60 * 60 * 2,
    expiration: 1000 * 60 * 60 * 24,
  };

  const store = MySQLStore(session);
  const sessionStore = new store(options);

  app.use(
    session({
      secret: env.COOKIE_SECRET,
      store: sessionStore,
      resave: false,
      saveUninitialized: false,
      cookie: {
        httpOnly: true,
        maxAge: 1000 * 60 * 60 * 24,
      },
    }),
  );

  await app.listen(env.PORT_BACKEND || 8080);
}
bootstrap();

错误是 picture here

用 require 代替 import 甚至都编译不了,我试过 express-mysql-session 包的方式:

var MySQLStore = require('express-mysql-session')(session);

我应该如何使它工作?或者有其他更好的包吗?

【问题讨论】:

    标签: typescript express session nestjs session-store


    【解决方案1】:

    好的,所以我让它工作了。最后还安装了mysql2包,你可以阅读here为什么。

    代码最终是这样的:

    import { NestFactory } from "@nestjs/core";
    import { env } from "./common/env";
    import { AppModule } from "./modules/app/app.module";
    import * as session from "express-session";
    import * as MySQLStoreCreator from "express-mysql-session";
    import * as mysql2 from "mysql2/promise";
    
    async function bootstrap() {
      const app = await NestFactory.create(AppModule, {
        cors: { credentials: env.ENABLE_CORS, origin: env.CLIENT_HOST },
      });
    
      //session store
      const options = {
        host: "db",
        port: 3306,
        user: env.DB_USER,
        password: env.DB_PASSWD,
        database: env.DATABASE,
        checkExpirationInterval: 1000 * 60 * 60 * 2,
        expiration: 1000 * 60 * 60 * 24,
      };
    
      const connection = mysql2.createPool(options);
      const sessionStore = new (MySQLStoreCreator(session))({}, connection);
    
      app.use(
        session({
          secret: env.COOKIE_SECRET,
          store: sessionStore,
          resave: false,
          saveUninitialized: false,
          cookie: {
            httpOnly: true,
            maxAge: 1000 * 60 * 60 * 24,
          },
        }),
      );
    
      await app.listen(env.PORT_BACKEND || 8080);
    }
    bootstrap();
    

    也许有人会觉得它有帮助 C:

    【讨论】:

    • 当我从 import session from 'express-session'; 更改为 import * as session from 'express-session'; 时,我收到一个错误“此表达式不可调用。”在线app.use(session({...我该如何解决?
    猜你喜欢
    • 2011-08-27
    • 2012-07-08
    • 2013-06-20
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2012-09-09
    相关资源
    最近更新 更多