Mac上Docker部署CouchDB,GraphQL无法获取全部用户数据
问题分析与解决方案
嘿,我一眼就看出问题出在哪了——你的users解析器里的N1QL查询触发了语法错误,根源是你把user用作了文档别名,而user是Couchbase N1QL的保留关键字,这导致查询解析器完全搞不清你想表达的结构,所以抛出了syntax error - at user的报错。
修复步骤
只需要把查询里的文档别名从user换成非保留关键字(比如u),同时调整语句中对应的引用即可:
var resolvers = { users: () => { // 将别名从user改为u,避免与N1QL保留关键字冲突 var statement = "SELECT META(u).id, u.* FROM `" + bucket._name + "` AS u WHERE u.type = 'user'"; var query = Couchbase.N1qlQuery.fromString(statement); return new Promise((resolve, reject) => { bucket.query(query, (error, result) => { if(error) { return reject(error); } resolve(result); }); }); }, user: (data) => { var id = data.id; return new Promise((resolve, reject) => { bucket.get(id, (error, result) => { if (error) { return reject(error); } resolve(result.value); }); }); } };
为什么这样修复?
Couchbase N1QL定义了一堆保留关键字(user就是其中之一),如果非要用这些关键字当别名、字段名或者桶名,必须用反引号包裹才能被正确识别。不过更简单稳妥的方式是直接用非关键字当别名,省得额外折腾语法细节。
你原来的查询里AS user没给user加反引号,解析器直接把它当成N1QL关键字处理,自然就炸了。改完别名后,查询就能正常解析,返回所有符合type = 'user'条件的文档了。
验证建议
你可以先在Couchbase的Query Workbench里跑一遍修改后的N1QL语句,确认能正确拿到用户数据,再回到GraphQL界面测试{ users{ id } }查询,应该就能得到预期结果了。
内容的提问来源于stack exchange,提问作者tobzilla90
相关产品推荐
相关产品推荐

