ค้นหาเว็บไซต์

typescript - TypeError [ERR_INVALID_ARG_TYPE], express-session+redis ข้อผิดพลาด


ฉันกำลังพัฒนาด้วย TypeScript + Express

ฉันต้องการใช้ Redis สำหรับการจัดเก็บ Session และฉันได้ติดตั้ง redis, connect-redis และฉันโค้ดด้านล่าง

import { createClient } from 'redis';
import * as RedisStore from 'connect-redis';
...
const client = createClient({
    url: 'redis://default:qwer1234@localhost:6379',
});
client.connect().then(() => {
    console.log('redis success');
});
...
app.use(
    session({
        secret: env.COOKIE_SECRET!,
        resave: false,
        saveUninitialized: false,
        store: new redisSession({
            client: client,
        }),
    })
);

และฉันเขียนโค้ดด้านล่างเพื่อตรวจสอบ Redis

app.get('/', (req, res) => {
    const sess = req.session;
    if (sess.key) {
        res.send(sess.key);
    } else {
        res.send('FAIL');
    }
});
app.post('/login', (req, res) => {
    const sess = req.session;
    const { username } = req.body;
    sess.key = username
    // add username and password validation logic here if you want.If user is authenticated send the response as success
    res.end('success');
});
app.get('/logout', (req, res) => {
    req.session.destroy((err) => {
        if (err) {
            return console.log(err);
        }
        res.send('OK');
    });
});

แต่ฉันได้รับข้อผิดพลาดดังต่อไปนี้เมื่อบันทึกค่าลงในเซสชัน TypeError [ERR_INVALID_ARG_TYPE]: อาร์กิวเมนต์ "chunk" ต้องเป็นประเภทสตริงหรืออินสแตนซ์ของ Buffer หรือ Uint8Array แต่ได้รับอินสแตนซ์ของ Array

เนื่องจากข้อผิดพลาดนี้ โค้ด passport-local ที่เคยใช้งานโดยเก็บข้อมูลในหน่วยความจำจึงไม่ทำงาน ช่วยฉันด้วย..

คำตอบ #1

มีปัญหาเมื่อใช้เวอร์ชัน redis 4.0 ที่อิงตามเวลาปัจจุบัน ดังนั้นคุณจำเป็นต้องตั้งค่า legacyMode: true ในการตั้งค่า redis

const client = createClient({
    url: yourURL,
    legacyMode: true,
});

บทความที่เกี่ยวข้อง