提问人:vladislav997 提问时间:11/16/2023 更新时间:11/17/2023 访问量:23
为什么我在 NestJs 中收到错误“无法设置未定义的属性”?
Why am I getting the error "Cannot set properties of undefined" in NestJs?
问:
我正在尝试在会话中设置csrfToken的值:
import { v4 as uuidv4 } from 'uuid';
import * as session from 'express-session';
@Injectable()
export class CsrfMiddleware implements NestMiddleware {
use(req: any, res: any, next: () => void) {
session({
secret: 'my-secret',
resave: false,
saveUninitialized: false,
});
req.session.csrfToken = uuidv4();
// other logic
next();
}
}
但是我收到一个错误: “TypeError:无法设置 undefined 的属性(设置 'csrfToken')”
我该如何解决这个问题?
答:
0赞
Jay McDoniel
11/17/2023
#1
session
以这种方式调用不会修改对象。通常,在调用中间件时,您可以像 的方法一样或在 的情况下进行调用。req
app.use(session(options))
consumer.apply(options)
NestModule
configure
要执行您要执行的操作,您需要将中间件称为
@Injectable()
export class CsrfMiddleware implements NestMiddleware {
async use(req: any, res: any, next: () => void) {
await new Promise((resolve, reject) => {
session({
secret: 'my-secret',
resave: false,
saveUninitialized: false,
})(req, res, resolve);
});
req.session.csrfToken = uuidv4();
// other logic
next();
}
}
或者,您需要让调用是一个单独的、以前称为中间件的。同样,您可以使用 in 或 方法session
app.use()
main.ts
configure
NestModule
要做到这一点,你可以做如下的事情。NestModule
@Module({})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(session(options), CsrfMiddleware).forRoutes('*');
}
}
评论
0赞
vladislav997
11/17/2023
您能否就如何以 a 的方法做到这一点提供建议?configure
NestModule
评论