Uso node.js + mysql en mi aplicación. Me gustaría exportar una matriz que contenga resultados/filas de una declaración de selección de SQL a otro archivo javascript y mostrar los valores almacenados en la matriz.
estadísticas.js
var phonenum='0718900000' var sql='SELECT name,surname,age from Tbluser WHERE number=?;' conn.query(sql,[phonenum],function(err,results){ if (err){ throw err; }; /*if (results==0) { let dealersMessage="❌ User not found" }*/ console.log(results) var datastatagentStore=[]; results.forEach(item =>{ module.exports=datastatagentStore.push({ name:item.name, surname:item.surname, age:item.age, }) })aplicación.js
var{datastatagentStore}=require('../functions/stats.js') console.log('User details '+datastatagentStore);Basado en un comentario anterior:
Mi objetivo es ejecutar la consulta y mostrar los resultados al usuario cada vez que el usuario selecciona el botón 'ver mis detalles'.
Entonces no desea exportar los resultados , desea exportar la función que realiza la consulta . Esa función devolvería [una Promise que se resuelve en] los resultados.
Si conn.query devuelve una Promise , entonces podría verse así:
var getUserDetails = function (phonenum) { var sql='SELECT name,surname,age from Tbluser WHERE number=?;' return conn.query(sql, [phonenum], function(err, results) { if (err) { throw err; }; console.log(results) var datastatagentStore = []; results.forEach(item => { datastatagentStore.push({ name:item.name, surname:item.surname, age:item.age, }) }); return datastatagentStore; }); }; module.exports = getUserDetails; Aunque no sé si conn.query devuelve una Promise . Si no es así, puede crear uno manualmente:
var getUserDetails = function (phonenum) { return new Promise(function (resolve, reject) { var sql='SELECT name,surname,age from Tbluser WHERE number=?;' conn.query(sql, [phonenum], function(err, results) { if (err) { reject(err); }; console.log(results) var datastatagentStore = []; results.forEach(item => { datastatagentStore.push({ name:item.name, surname:item.surname, age:item.age, }) }); resolve(datastatagentStore); }); }); }; module.exports = getUserDetails; Tenga en cuenta el uso de resolve y reject aquí para completar manualmente la Promise . Pero sin importar cómo lo estructure, el punto general es que la exportación de su módulo no sería el resultado de haber ejecutado la consulta, sería la función para ejecutar la consulta. Y dado que ejecutar la consulta es una operación asíncrona, esa función debería devolver una Promise .
Luego puede usarlo como cualquier otra operación asíncrona:
var datastatagentStore = require('../functions/stats.js'); datastatagentStore('0718900000').then(function (details) { console.log('User details ', details); });