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';
}
}
}
}
我想知道,如何将 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';
}
}
}
}