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 文件的主要内容,如果未能解决你的问题,请参考以下文章