【发布时间】:2019-12-28 01:10:00
【问题描述】:
我已经四处寻找查询 graphQl 端点的方法,但到目前为止,他们都有一个与我非常相似且笨拙的解决方案:字符串构建。这里有几个链接:
- querying graphql with node
- https://blog.apollographql.com/4-simple-ways-to-call-a-graphql-api-a6807bcdb355
- https://www.npmjs.com/package/graphql-request
最终,我现在正在运行的代码(并不真正喜欢)是:
// replace anything that looks like this => %someVar
// with the value at vars[someVar]
function injectVars(query, vars) {
return query.replace(/%([\d\w]+)/g, (_, varName) => {
if (!vars.hasOwnProperty(varName)) {
throw new Error(`Undefined variable: ${varName}`);
}
return vars[varName];
});
}
// a query with the injection point "%userId"
const userQuery = `query getUser{
user(
id: "%userId"
) {
id
name
}
}`;
// successful injection
const query = injectVars(userQuery, {
userId: "some-id-123"
});
console.log(query);
// failed usage
const willFail = injectVars(userQuery, {
nonVar: "missingUserId"
});
上面的代码有问题:
似乎容易受到注入攻击
不是很好的类型检查
使用 ENUMS 或类型转换有点麻烦(即获取日期并将其设为字符串)
不是很可扩展。必须为不同的迭代复制粘贴很多相同的东西。
我是新手,天生不相信我的解决方案。
无论如何,我如何从节点 js 查询 GraphQl 端点,而无需进行繁琐的字符串操作?是否有任何工具/建议可以使这种交互更加面向对象?
【问题讨论】:
标签: javascript node.js graphql