【问题标题】:Connect-redis, express-session setup failure: UnhandledPromiseRejectionWarning: Error: The client is closedConnect-redis,快速会话设置失败:UnhandledPromiseRejectionWarning:错误:客户端已关闭
【发布时间】:2022-01-09 18:29:53
【问题描述】:
import { MikroORM } from '@mikro-orm/core';
import { ApolloServer } from 'apollo-server-express';
import express from 'express';
import { buildSchema } from 'type-graphql';
import { __prod__ } from './constants';
import mikroOrmConfig from './mikro-orm.config';
import { HelloResolver } from './resolvers/hello';
import { PostResolver } from './resolvers/post';
import { UserResolver } from './resolvers/user';

const main = async () => {
  const orm = await MikroORM.init(mikroOrmConfig);
  await orm.getMigrator().up();

  const app = express();

  const redis = require('redis');
  const connectRedis = require('connect-redis');
  const session = require('express-session');
  const RedisStore = connectRedis(session);

  const redisClient = redis.createClient({
    port: 6379,
    host: 'localhost',
  });

  app.use(
    session({
      name: 'qid',
      saveUninitialized: false,
      secret: 'sdfdsf24342fdsdfdsf23f2fdwf',
      resave: false,
      store: new RedisStore({
        client: redisClient,
        disableTouch: true,
      }),
      cookie: {
        maxAge: 86400 * 10, // 10 days
        httpOnly: true,
        secure: __prod__,
        sameSite: 'lax',
      },
    })
  );

  const appoloServer = new ApolloServer({
    schema: await buildSchema({
      resolvers: [HelloResolver, PostResolver, UserResolver],
      validate: false,
    }),

    // context is an object accessible by all the resolvers
    context: ({ req, res }) => ({ em: orm.em, req, res }),
  });

  appoloServer.applyMiddleware({ app });

  app.listen(4000, () => {
    console.log('Server is started on 4000');
  });
};

main().catch(err => {
  console.error(err);
});

$纱线开发 结果:服务器在 4000 上启动 2秒后: UnhandledPromiseRejectionWarning:错误:客户端已关闭 在 Commander._RedisClient_sendCommand (/home/hleb/Projects/wreddit-server/node_modules/@node-redis/client/dist/lib/client/index.js:387:31)

我做错了什么? 谢谢。

【问题讨论】:

    标签: express redis express-session


    【解决方案1】:
    import { createClient } from 'redis';
    
    const redisClient = createClient({
        url: yoururl,
    });
    
    (async () => {
        redisClient.on('error', (err) => console.log('Redis Client Error', err));
        await redisClient.connect();
    })();
    
    export default redisClient;
    

    我不知道为什么 我运行 redisClint.connet() 问题就解决了。

    【讨论】:

    • 您能否根据我的代码固定到此问题的上下文中提出您的解决方案?谢谢。
    • 只需将我代码中的异步函数添加到您声明的redisClient之后的行。
    猜你喜欢
    • 2022-01-08
    • 2021-05-28
    • 2022-01-20
    • 2022-01-08
    • 2020-01-19
    • 2015-12-28
    • 2022-08-04
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多