首页 文章

TypeError:obj.hasOwnProperty在调用Graphql变异时不是函数

提问于
浏览
1

我得到一个奇怪的错误,无法弄清楚我做错了什么 . 我写了一个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 回答

  • 3

    如果您正在使用 graphql-js ,有很多地方使用 Object.create(null) 创建新对象,这与 {} 不同,您可以在此处阅读有关此内容的说明Creating Js object with Object.create(null)?

    但基本上用 Object.create(null) 创建的对象没有 hasOwnProperty 方法

    您可以在节点中尝试使用

    const obj1 = Object.create(null)
    console.log(typeof obj1.hasOwnProperty)
    // 'undefined'
    const obj2 = {}
    console.log(typeof obj2.hasOwnProperty)
    // 'function'
    

    您可以使用另一种方法来确定对象是否具有可用于使用 Object.create(null) 创建的对象的键

    function hasKey(obj, key) {
      return Object.keys(obj).indexOf(key) !== -1
    }
    
  • 0

    好的,经过一段时间的试验和错误,我能够解决问题 . 更改我传递给.merge函数的对象的位置是解决方案 . 工作代码是:

    const args = _.merge(auth, { params: parameter });
    

    两者都是对象,但似乎来自graphql变量的对象没有所需的hasOwnProperty方法 . 简单地说,不是将“好对象”(auth)复制到坏的(参数)中,而是将坏的一个复制到具有所需功能的好的一个中 .

    希望这可以帮助也遇到此错误的其他人 .

相关问题