我想知道,我如何将QueryResolver的字段值传递到GraphQL和NodeJS/Apollo中的另一个JS文件(database.js)。在Database .js文件中,我与MariaDB连接MYSQL数据库,并获得动态数据信息。该信息应该通过用户在查询中输入的ID来获取。id在我的QueryResolver中是已知的,但我不知道如何将这个id传递给我的database.js文件,以便我的用户获得他想要的数据。
应该是用户输入的ID,而不是代码中的0。
What I tried:我试图将ID保存在一个变量中,并返回ID和articledata(这些是我的动态数据,用户在查询后得到)。我试图访问函数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(在Models文件夹):
//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 };
```
这个问题是在大多数情况下如何从异步调用返回响应的重复。请阅读我所参考的问题的答案。
经过一些尝试后,我发现当我将我的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';
}
}
}
}