问题描述: 在使用AppSync和DynamoDB时,发现在生成的创建函数中,指定的DynamoDB类型没有起作用。
解决方法:
type MyModel @model {
id: ID!
name: String!
age: Int!
createdAt: AWSDateTime
updatedAt: AWSDateTime
}
生成的创建函数可能会自动创建一个名为createMyModel
的函数。这个函数可能是自动生成的,不会使用你在模型中定义的DynamoDB类型。
为了解决这个问题,可以手动创建一个名为createMyModel
的函数,并在其中指定DynamoDB类型,例如:
type Mutation {
createMyModel(input: CreateMyModelInput!): MyModel
@aws_iam
@aws_cognito_user_pools
@function(name: "myFunctionName")
}
const AWS = require('aws-sdk');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const { name, age } = event.arguments.input;
const params = {
TableName: 'MyModelTable',
Item: {
id: event.info.parentTypeName + ':' + event.info.fieldName + ':' + uuidv4(),
name: name,
age: age,
createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString()
}
};
await dynamoDb.put(params).promise();
return {
id: params.Item.id,
name: params.Item.name,
age: params.Item.age,
createdAt: params.Item.createdAt,
updatedAt: params.Item.updatedAt
};
};
这样就可以确保在创建函数中使用正确的DynamoDB类型。