Table '[database-name].sessions' 不存在 - 使用 express-session

Table '[database-name].sessions' doesn't exist - using express-session

这是一些概述我的问题的示例代码。我正在尝试让 express-session / connect-session-sequelize 为具有登录功能的网站工作。

但是,当我尝试调用我的 POST 请求时,出现以下错误:

我只能假设它正在尝试将会话数据存储到我的数据库中,但找不到 table。我可以通过进入并使用它想要的所有列手动创建 table 来绕过它,但我想知道我的代码中是否存在阻止程序包正常工作的问题(或者这是否应该如此工作。)

require('dotenv').config({ path: './config/.env' })
const express = require('express')
const session = require('express-session')
const mysql = require('mysql2')
const Sequelize = require('sequelize')
const path = require('path')
const SequelizeStore = require('connect-session-sequelize')(session.Store)

const app = express()
const PORT = 9999

app.use(express.json())

app.use(express.static(path.join(__dirname, 'public')))

// Allowing connection to database in Workbench
const db = new Sequelize('somedatabase', 'root', process.env.PASSWORD, {
    host: 'localhost',
    dialect: 'mysql'
})

db.authenticate()
    .then(() => {
        console.log('Connected...')
    }).catch(error => {
        console.log('Failed to connect...', error)
    })


// Setting up session
app.use(session({
    secret: 'shhh',
    store: new SequelizeStore({
        db: db
    }),
    resave: false,
    saveUninitialized: true,
    cookie: {
        maxAge: 1000000
    }
}))




// Sample model
const User = db.define('user', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    username: Sequelize.STRING,
    password: Sequelize.STRING
})


// Sample request
app.post('/api/create', async (req, res) => {
    const newUser = {
        username: john,
        password: verysecurepassword
    }

    await User.create(newUser)
})



app.listen(PORT, () => {
    console.log(`Listening on localhost:${PORT}...`)
})

在此代码中,您使用了几个包:express-session,它管理会话本身,但将会话的保存方式委托给 connect-session-sequelize。 所以问题是 connect-session-sequelize 试图在数据库中保存会话数据,但它不能,因为没有 table 用于会话。 正如这个包的文档中所写的那样(https://www.npmjs.com/package/connect-session-sequelize):

If you want SequelizeStore to create/sync the database table for you, you can call sync() against an instance of SequelizeStore along with options if needed.

所以尝试创建商店,将其附加到会话管理器,然后 初始化它(我没有测试这段代码):

// Setting up session
var myStore = new SequelizeStore({
  db: db
});
app.use(
  session({
    secret: "shhh",
    store: myStore,
    resave: false,
    saveUninitialized: true,
    cookie: {
        maxAge: 1000000
    }
  })
);

myStore.sync();