此问题是从我们Github account上的一个问题迁移而来的,因为我们希望其他人都可以得到答案。这是原始问题:
你好
以下是我尝试过的InstanceQuery
Forest
我收到的回覆为Leaf
那我应该尝试哪种正确格式?
https://build.fhir.org/graphql.html的样本为http://localhost:3000/3_0_1/Questionnaire/jamana/$graphql?query={id}
。它在其服务器上工作。当我在graphql-fhir中尝试类似操作时,我无法得到响应。
答案 0 :(得分:0)
Github的原始答案:
由于我们使用express-graphql
,所以我们使用命名查询。我认为这不是有效的语法。另外,提供的网址似乎不起作用,我只是得到一个OperationOutcome,说该患者不存在,这不是有效的GraphQL响应。
您可以尝试从以下位置更改查询吗?
http://localhost:3000/3_0_1/Questionnaire/jamana/$graphql?query={id}
对此:
http://localhost:3000/3_0_1/Questionnaire/jamana/$graphql?query={Questionnaire{id}}
编写查询时,您需要在实例查询中提供返回类型。您应该得到一个类似于以下内容的响应(如果您已经实现了解析器,那么您将获得数据,而不是null):
{
"data": {
"Questionnaire": {
"id": null
}
}
}
以及后来的评论:
如果获取的是null,则说明您正确执行了此操作,但是尚未编写查询或将其连接到数据源。您仍然需要在解析器中退回问卷。
看到的地方:
instance: {
name: 'Questionnaire',
path: '/3_0_1/Questionnaire/:id',
query: QuestionnaireInstanceQuery,
},
您会看到正在使用id参数注册端点,该参数与GraphQL参数不同。这只是一个明确的论点。如果导航到questionnaire/query.js文件,则可以看到QuestionnaireInstanceQuery查询的解析器与标准QuestionnaireQuery不同。因此,在您的questionnaire/resolver.js文件中,如果要使查询和实例查询都起作用,则需要实现两个解析器。
例如
// This is for the standard query
module.exports.getQuestionnaire = function getQuestionnaire(
root,
args,
context = {},
info,
) {
let { server, version, req, res } = context;
// Do query and return questionnaire
return {};
};
// This one is for a questionnaire instance
module.exports.getQuestionnaireInstance = function getQuestionnaireInstance(
root,
args,
context = {},
info,
) {
let { server, version, req, res } = context;
// req.params.id is your questionnaire id, use that for your query here
// queryQuestionnaireById does not exist, it is pseudo code
// you need to query your database here with the id
let questionnaire = queryQuestionnaireById(req.params.id);
// return the correct questionnaire here, default returns {},
// which is why you see null, because no data is returned
return questionnaire;
};