在AWS AppSync的resolver中,$ctx和$context都是可用的上下文对象,但它们有一些区别。
$ctx 是AppSync生成的上下文对象,包含了当前请求的各种信息,例如请求的参数、身份验证凭据、请求的源数据等。$ctx是只读的,不允许修改。
$context 是自定义的上下文对象,可以在创建resolver时自定义并传递给它。$context是可读写的,可以在resolver中使用它来存储和访问自定义的数据。
下面是一个示例,展示了如何在AWS AppSync中使用$ctx和$context:
创建一个AppSync API,并定义schema和resolver。
在resolver中,可以使用$ctx来访问请求的参数和其他相关信息:
# schema.graphql
type Query {
getUser(id: ID!): User
}
type User {
id: ID!
name: String
email: String
}
# resolver.js
exports.handler = async (event) => {
const userId = event.arguments.id;
const user = await getUserFromDatabase(userId);
return user;
};
// resolver.js
exports.handler = async (event, context) => {
const userId = event.arguments.id;
const user = await getUserFromDatabase(userId);
// 存储自定义的数据到$context中
context.myData = { foo: 'bar' };
return user;
};
// resolver.js
exports.handler = async (event, context) => {
const myData = context.myData;
// 访问之前存储的自定义数据
console.log(myData.foo); // 输出 'bar'
return someData;
};
总结: $ctx是AppSync生成的上下文对象,只读,包含了请求的各种信息。 $context是自定义的上下文对象,可读写,用来存储和访问自定义的数据。