【问题标题】:hyperledger-composer query with "CONTAINS" operator not working带有“CONTAINS”运算符的超级账本作曲家查询不起作用
【发布时间】:2018-07-06 03:04:01
【问题描述】:

在我的带有角度前端的 hyperledger-composer 应用程序中,我想向 REST 服务器发送查询。

query selectEmployeesByProject {
    description: "Select all employees with access to the specified project"
    statement:
        SELECT org.comp.app.Employee
            WHERE (projects CONTAINS [_$project])
                ORDER BY [lastName, firstName]
}

员工定义如下:

participant Employee {
  o String lastName
  o String firstName
  --> Project[] projects optional
}

发送的http请求如下:

this.httpClient.get<any[]>(requestURL, {withCredentials: true});

请求网址如下:

http://localhost:4200/api/queries/selectEmployeesByProject?projects=resource:org.comp.app.Project#project1ID

在控制台中我收到以下错误消息:

加载资源失败 http://localhost:4200/api/queries/selectEmployeesByProject?projects=resource:org.comp.app.Project#project1ID 服务器响应状态为 400(错误请求)

为什么查询不起作用?


一般来说,对 REST 服务器的 httpRequests 在我的应用程序中工作。甚至其他查询也有效。但是,使用“CONTAINS”运算符(例如上面的那个)的查询不起作用。

【问题讨论】:

    标签: hyperledger-composer named-query


    【解决方案1】:

    更有可能

    query selectClientsByProjects {
        description: "Select all clients with access to a certain project"
        statement:
            SELECT org.myComp.myApp.Client
                WHERE (projects CONTAINS [_$project])
                    ORDER BY [lastName ASC, firstName ASC]
    }
    

    注意:在撰写本文时 - CouchDB 不允许 ORDER BY 子句包含多个不同排序方向的项目(显然不是上述情况)。

    另外 - 未经测试,但您的 http 调用可能需要:

    this.http.get('http://localhost:4200/api/queries/selectClientsByProjects?projects=resource:org.myComp.myApp.Project%231')
    

    (%23 是 '#' 的 ASCII 码)

    无论如何,您都可以先尝试一下您的定义(例如,可能没有 ORDER BY)等等。注意:CONTAINS 必须匹配一个条目('数组包含一个元素,具有完整的字符串匹配(上图),在任何元素中,在那个数组)

    【讨论】:

    • 感谢您的回答...我尝试了您的所有提示,但不幸的是,它没有任何作用
    猜你喜欢
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多