试图检索一个单一的实体时出错(Error when trying to retrieve a sin

2019-10-18 03:31发布

我一直在与谷歌云端点玩弄过去几天(旨在与AngularJS把它挂),我遇到了一点麻烦,当我尝试从我的数据存储检索单个实体。

我的ndb模式设置为:

class Ingredients(EndpointsModel):
    ingredient = ndb.StringProperty()

class Recipe(EndpointsModel):
    title = ndb.StringProperty(required=True)
    description = ndb.StringProperty(required=True)
    ingredients = ndb.StructuredProperty(Ingredients, repeated=True)
    instructions = ndb.StringProperty(required=True)

这里是我定义来检索该实体的API方法'title'

    @Recipe.method(request_fields=('title',), path='recipe/{title}',
                   http_method='GET', name='recipe.get')
    def get_recipe(self, recipe):
        if not recipe.from_datastore:
            raise endpoints.NotFoundException('Recipe not found.')
        return recipe   

如果我使用API方法工作正常'id' (提供辅助方法EndpointsModel代替) 'title'的请求字段。 当我使用'title' ,但是,我越来越

404未找到

{ “ERROR_MESSAGE”: “配方没有找到。”, “状态”: “的Application_Error”}

任何人都可以指出,如果我失去了一些东西的地方?

:参见注释。 用来解读问题的错误

400错误的请求

{“ERROR_MESSAGE”:“错误解析ProtoRPC的请求(无法解析请求内容:消息RecipeProto_title缺少必需的字段的标题)”,“状态”:“REQUEST_ERROR”}

但@sentiki能够解决这个以前的错误。

Answer 1:

404的预期。 在的“神奇” id属性是它调用UpdateFromKey 。

这种方法试图设置一个ndb.Key基于所述请求的实体,然后尝试检索存储与该密钥的实体。 如果实体存在,从数据存储区中的值复制到从所述请求解析的实体,然后将_from_datastore属性设置为True

通过使用request_fields=('title',)你有一个简单的数据属性,而不是一个EndpointsAliasProperty ,因此只值设置。 其结果是, _from_datastore永远不会被设置和支票

    if not recipe.from_datastore:
        raise endpoints.NotFoundException('Recipe not found.')

抛出endpoints.NotFoundException预期。



文章来源: Error when trying to retrieve a single entity