node.js - res.session 未定义 graphql apollo-server-express
问题描述
我在会话方面遇到问题。出于某种原因,即使我使用会话中间件, req.session 也是未定义的。我试图使用redis,但无法使连接正常工作。奇怪的是,由于某种原因,cookie 在 graphql 游乐场中注册。所以原因一定是我传递请求的方式,可能。
所有类型都是正确的(打字稿对任何事情都不生气)。
这是来自 server.ts 的代码
import express, { Request, Response } from "express";
import routes from "./routes";
import cors from "cors";
import "reflect-metadata";
import { createConnection } from "typeorm";
import { ApolloServer } from "apollo-server-express";
import { buildSchema } from "type-graphql";
import session from "express-session";
createConnection()
.then(async (connection) => {
console.log("Conexão feita com sucesso");
const app = express();
app.set("trust proxy", 1);
app.use(cors());
app.use(
session({
name: "qid",
secret: "keyboard cat",
resave: false,
saveUninitialized: true,
cookie: {
secure: false,
maxAge: 1000 * 60 * 60 * 24 * 365 * 10,
httpOnly: true,
},
})
);
const apolloServer = new ApolloServer({
schema: await buildSchema({
resolvers: [
],
validate: false, // Activate the validation with class-validation module.
}),
context: (req: Request, res: Response): Context => ({ req, res, session: req.session }),
playground: {
settings: {
'request.credentials': 'include',
},
},
});
apolloServer.applyMiddleware({ app });
app.use(express.json());
app.use(routes);
app.listen(3333);
})
.catch((error) => console.error(error));
我在哪里使用会话。
@Mutation(() => UserResponse)
async login(
@Arg("info", () => UserLoginInputType) info: UserLoginInputType,
@Ctx(){req, res, session}: Context
): Promise<UserResponse> {
const user = await User.findOneOrFail({ where: { email: info.email } });
const valid = await argon2.verify(user.password, info.password);
if (valid) {
req.session.userId = user.id;
return {
user,
};
}
return {
errors: [
{
field: "password",
message: "Incorrect password",
},
],
};
}
解决方案
我只是在传递 res 和 req 时忘记了大括号
推荐阅读
- azure - 用于节点的 aks-engine 自定义映像
- linux - 如何在设备树中配置多个 I/O Expander PCF8574a?
- c++ - 使用常量产生的代码比 #define 更小的示例
- colors - Chart JS中根据背景颜色确定一个点的面积
- flutter - 未处理的异常:在 _ScreenState.initState() 完成之前调用了 inheritFromWidgetOfExactType(_LocalizationsScope) 或 inheritFromElement()
- php - Laravel 队列作业给出错误模型未找到
- sapui5 - 云连接器问题。云到本地
- firebase - 设置环境变量以 "-bash: !": event not found 结尾
- typescript - 测试 NGRX 效果的茉莉花弹珠
- java - 如何将失败的 Cucumber 步骤的屏幕截图准确地附加到 Allure 报告中,而不是在 Tear Down 部分?