const schema = a
.schema({
UserProfileFlags: a.customType({
isBetaUser: a.boolean(),
isFounder: a.boolean(),
isBanned: a.boolean(),
isSuspended: a.boolean(),
isVerified: a.boolean(),
isDeleted: a.boolean(),
}),
UserProfile: a
.model({
userName: a.string().required(),
owner: a
.string()
.authorization((allow) => [allow.owner().to(['read', 'delete'])]),
...
在Dynamo中定义一个名为userProfile的数据库。可以正常工作,创建数据库并存在表。现在,我正在尝试创建一个函数以访问该表。我尝试了许多迭代,但是它们都有错误/不会编译或工作:
我发现了这一点:
import { DynamoDB } from 'aws-sdk';
import { getDataSource } from '@aws-amplify/backend-function';
import type { Schema } from '../../data/resource';
const dynamodb = new DynamoDB.DocumentClient();
export const handler: Schema['createEmptyProfile']['handler'] = async (event, context) => {
const dataSource = getDataSource(context);
const TABLE_NAME = dataSource.resources.UserProfile.tableName;
这个人告诉我,
import { getDataSource } from '@aws-amplify/backend-function';
Module'“@aws-amplify/backend-function”'没有导出的成员'getDatasource'.ts(2305)
我也尝试过以下操作: NPX AMPX生成GraphQl-Client-Code-Out /GraphQl然后
import { env } from "$amplify/env/post-confirmation"; ... endpoint: env.AMPLIFY_DATA_GRAPHQL_ENDPOINT, ...
但这也显示了Amplify_data_graphql_endpoint是未定义的,如果我在生成的.TS文件中查看,我也看不到它。 这是有道理的,因为我不确定它在部署时如何工作,因为它需要不同的表名称。这一切都与本地沙箱相对。
我可以找到的文档链接是:https://docs.amplify.aws/react/build-a-backend/functions/exampleas/create-user-profile-record/
您可以在
defineBackend()
之后获取对表名称(和其他详细信息)的访问,如:但是,为了在lambda函数中使用它,将其添加为env var中的函数:backend.createEmptyProfile.addEnvironment("USER_PROFILE_TABLE", backend.data.resources.tables["UserProfile"].tableName);
在功能中,只需以此访问:
import { env } from "$amplify/env/createEmptyProfile";
const TABLE_NAME = env.USER_PROFILE_TABLE;
注:
“ env”将在本地更新(因此您不会遇到TS错误)。