【问题标题】:Cannot set headers after they are sent to the client NESTJS将标头发送到客户端 NESTJS 后无法设置标头
【发布时间】:2022-01-14 11:16:44
【问题描述】:

第一次请求后我收到错误,下一个请求下降。 它发生在将 redis 连接到我的会话存储之后

Error: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:371:5)
    at ServerResponse.setHeader (node:_http_outgoing:576:11)
    at ServerResponse.header (C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\express\lib\response.js:267:15)
    at ExpressAdapter.reply (C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\@nestjs\platform-express\adapters\express-adapter.js:36:57)
    at ExceptionsHandler.handleUnknownError (C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\@nestjs\core\exceptions\base-exception-filter.js:38:24)
    at ExceptionsHandler.catch (C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\@nestjs\core\exceptions\base-exception-filter.js:17:25)
    at ExceptionsHandler.next (C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\@nestjs\core\exceptions\exceptions-handler.js:16:20) 
    at C:\Users\mxxnseat\Desktop\deliverycx_nest\server\node_modules\@nestjs\core\router\router-proxy.js:24:35

main.ts

async function bootstrap() {
    const app = await NestFactory.create(AppModule);

    app.enableCors({
        origin: "http://localhost:3000",
        credentials: true
    });

    doc(app);

    await app.listen(process.env.PORT);
}

app.module.ts

@Module({
    imports: [
        ConfigModule.forRoot({
            envFilePath: __dirname + "/../../.env"
        }),
        ProductModule,
        CategoryModule,
        CityModule,
        OrganizationModule,
        UserModule,
        CartModule,
        OrderModule,
        FavoriteModule,
        RedisModule
    ],
    providers: [
        {
            provide: APP_FILTER,
            useClass: InternalException
        },
        {
            provide: APP_FILTER,
            useClass: BaseErrorsFilter
        }
    ]
})
export class AppModule implements NestModule {
    constructor(
        @Inject("REDIS") private readonly redis: ReturnType<typeof createClient>
    ) {}

    async configure(consumer: MiddlewareConsumer) {
        this.redis.on("connect", () => {
            console.log("success connect to REDIS");
        });

        this.redis.on("error", (err) => {
            console.log("error", err);
        });
        consumer
            .apply(
                session({
                    store: new (RedisStore(session))({
                        client: this.redis,
                        logErrors: true
                    }),
                    secret: process.env.SESSION_SECRET,
                    resave: true,
                    saveUninitialized: true,
                    cookie: {
                        sameSite: false,
                        httpOnly: true
                    }
                })
            )
            .forRoutes("*");
    }
}

redis.module.ts

import { Module } from "@nestjs/common";
import { createClient } from "redis";

@Module({
    providers: [
        {
            provide: "REDIS",
            useValue: createClient({ url: `redis://127.0.0.1:6379` })
        }
    ],
    exports: ["REDIS"]
})
export class RedisModule {}

【问题讨论】:

    标签: node.js express redis nestjs


    【解决方案1】:

    我解决了我的问题。它在 redis 服务器的权限中

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2021-06-18
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    相关资源
    最近更新 更多