我得到一个奇怪的错误,无法弄清楚我做错了什么 . 我写了一个graphql变异来调用api:
domainStuff: async (parent, { command, params }, { models }) => {
console.log("Params:", params);
const result = await dd24Api(command, params);
return result;
}
这就是我所说的功能:
export default async (command, parameter) => {
const args = _.merge({ params: parameter }, auth);
// Eleminate copying mistakes
console.log(typeof args);
const properCommand = command + "Async";
const result = await soap
.createClientAsync(apiWSDL)
.then(client => {
return client[properCommand](args)
.then(res => {
console.log(res[command + "Result"]);
return res[command + "Result"];
})
.catch(err => {
console.log(err);
return err;
});
})
.catch(err => console.log(err));
return result;
使用此查询变量:
{
"command": "CheckDomain",
"params": {"domain": "test.it"}
}
console.log向我显示args是一个对象,但是我得到了这个错误(来自第一个catch块):
TypeError: obj.hasOwnProperty is not a function
怎么可能?毕竟我检查它是否是一个对象,它是 . 更奇怪的是,如果我将一个硬编码对象放入查询中,例如:
domainStuff: async (parent, { command, params }, { models }) => {
console.log("Params:", params);
const result = await dd24Api(command, {domain: "test.com"});
return result;
}
然后它工作得很好 . 我究竟做错了什么?请提前获得任何帮助 .
编辑:我使用“graphql-server-express”:“^ 0.8.0”和“graphql-tools”:“^ 1.0.0”
2 回答
如果您正在使用
graphql-js
,有很多地方使用Object.create(null)
创建新对象,这与{}
不同,您可以在此处阅读有关此内容的说明Creating Js object with Object.create(null)?但基本上用
Object.create(null)
创建的对象没有hasOwnProperty
方法您可以在节点中尝试使用
您可以使用另一种方法来确定对象是否具有可用于使用
Object.create(null)
创建的对象的键好的,经过一段时间的试验和错误,我能够解决问题 . 更改我传递给.merge函数的对象的位置是解决方案 . 工作代码是:
两者都是对象,但似乎来自graphql变量的对象没有所需的hasOwnProperty方法 . 简单地说,不是将“好对象”(auth)复制到坏的(参数)中,而是将坏的一个复制到具有所需功能的好的一个中 .
希望这可以帮助也遇到此错误的其他人 .