【问题标题】:Table '[database-name].sessions' doesn't exist - using express-session表 '[database-name].sessions' 不存在 - 使用 express-session
【发布时间】:2021-12-01 13:48:51
【问题描述】:

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

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

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

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}...`)
})

【问题讨论】:

    标签: mysql node.js express-session


    【解决方案1】:

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

    如果您希望 SequelizeStore 为您创建/同步数据库表,您可以针对 SequelizeStore 的实例调用 sync() 以及必要时的选项。

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

    // 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();
    

    【讨论】:

      猜你喜欢
      • 2015-03-13
      • 2020-07-13
      • 1970-01-01
      • 2018-06-30
      • 2018-03-07
      • 2016-02-08
      • 1970-01-01
      • 2016-03-01
      • 2021-03-15
      相关资源
      最近更新 更多