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

Posted

技术标签:

【中文标题】NodeJS:将字段值从 ResolverQuery 传递到另一个 JS 文件【英文标题】:NodeJS: Pass field value from ResolverQuery to another JS File 【发布时间】:2021-12-10 16:40:46 【问题描述】:

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

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

我尝试了什么: 我试图将 ID 保存在变量中并返回 id 和 articledatas(这些是用户在查询后获得的动态数据)。我试图访问函数 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 ;
```

【问题讨论】:

【参考方案1】:

这个问题在大多数情况下与How to return the response from an asynchronous call 重复。请阅读我提到的问题的答案。

【讨论】:

感谢您的回答,但我的承诺电话工作正常(database.js 不是问题)。它是关于如何从查询之外的 ResolverQuery 中的 id 进行引用,以便我可以在我的 database.js 中使用 id【参考方案2】:

经过一些尝试,我发现当我将 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';
            
        
    

【讨论】:

以上是关于NodeJS:将字段值从 ResolverQuery 传递到另一个 JS 文件的主要内容,如果未能解决你的问题,请参考以下文章

将值从后端 nodejs 传递到前端反应原生

如何将复选框值从 HTML 发送到 Node JS?

如何将值从mysql传递到创建视图中的表单字段

从 2 个不同的文本字段将 2 个值从 php 传递到 ajax

如何将值从字段传递给 Odoo 13 中的向导?

如何将值从视图传递到不可编辑的字段django python