Me gustaría saber cómo puedo pasar un valor de campo de QueryResolver a otro archivo JS (database.js) en GraphQL y NodeJS/Apollo. En el archivo base de datos.js me conecto con mi base de datos MYSQL con MariaDB y obtengo información de datos dinámicamente. La información debe ser obtenida por el ID que el usuario ingresa en la consulta. La identificación se conoce en mi QueryResolver, pero no sé cómo puedo pasar esta identificación a mi archivo database.js, para que mi usuario obtenga los datos que desea.
En lugar del 0 en el código, debe estar el ID que ingresó el usuario.
Lo que probé : traté de guardar la identificación en una variable y devolver la identificación Y los datos del artículo (estos son mis datos dinámicos que el usuario obtiene después de la consulta). Y traté de obtener acceso a la función get_result para obtener la identificación, pero luego me quedé atascado, porque no sé si podría acceder a esta función fuera de la consulta. ¿Alguien podría ayudarme por favor?
Mi resolución se ve así (este es mi problema):
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'; } } } }Este es mi data.js (en la carpeta Modelos):
//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 }; ```Esta pregunta es un duplicado de Cómo devolver la respuesta de una llamada asincrónica en la mayor parte del tiempo. Por favor, lea la respuesta a la pregunta que me refiero.
Después de algunos intentos, descubrí que cuando pasé el código de mi data.js DIRECTAMENTE en la Consulta, entonces no tengo que pasar la ID fuera de la Consulta. Esto funciona:
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'; } } } }