NodeJS:将字段值从 ResolverQuery 传递到另一个 JS 文件

NodeJS: Pass field value from ResolverQuery to another JS File

我想知道,如何将 QueryResolver 的字段值传递给 GraphQL 和 NodeJS/Apollo 中的另一个 JS 文件 (database.js)。在 database.js 文件中,我使用 MariaDB 连接我的 MYSQL 数据库并动态获取数据信息。该信息应通过用户在查询中输入的 ID 获取。我的 QueryResolver 中知道该 ID,但我不知道如何将此 ID 传递到我的 database.js 文件,以便我的用户获得他想要的数据。

不是代码中的 0,而是用户输入的 ID。

我试过的: 我试图将 ID 保存在一个变量中,并将 ID 和文章数据保存到 return(这些是用户在查询后获得的动态数据)。我试图访问函数 get_result 来获取 id,但后来我卡住了,因为我不知道我可以在查询之外访问这个函数。有人可以帮我吗?

我的解析器看起来像这样(这是我的问题):


module.exports = {
    Query: {
        article: (parent, {id}) => {
                var data = models.articledata.find((c) => c.id == id);
                var id_work = id;

                function get_returns(){return [data, id_work];}
                
                var get_results = get_returns();

                return get_results[0];
        },
    },

    Node: {
        __resolveType(node) {
            if(node.toObject().name){
                return 'Article';
            }
        }
    }
}

这是我的 data.js(在模型文件夹中):


//This works fine!
var read = function(){
  return new Promise(function(resolve, reject){

    var query_str = 'SELECT * FROM Artikel';
    conn.query(query_str, function (err, rows, fields) {
      if (err) {
        return reject(err);
      }
      resolve(rows)
    });
  });
}

//Here I want to replace the 0 with the {id} of the resolver above->Problem how can I get a reference of the {id} from the resolver?
var title = read().then(function(rows){return rows[0].NAME});
var articledatas = [{
    title: title,
}];
module.exports = { articledatas };
```

这个问题大部分时间都是 How to return the response from an asynchronous call 的重复问题。请阅读我提到的问题的答案。

经过一些尝试,我发现当我将 data.js 的代码直接传递到查询中时,我就不必在查询之外传递 ID。这有效:

module.exports = {
    Query: {
        article: (parent, {id}) => {
              
var read = function(){
  return new Promise(function(resolve, reject){

    var query_str = 'SELECT * FROM Artikel';
    conn.query(query_str, function (err, rows, fields) {
      if (err) {
        return reject(err);
      }
      resolve(rows)
    });
  });
}

var title = read().then(function(rows){return rows[id].NAME});
var articledatas = [{
    title: title,
}];  

         return = articledata.find((c) => c.id == id);

        },
    },

    Node: {
        __resolveType(node) {
            if(node.toObject().name){
                return 'Article';
            }
        }
    }
}