使用module.exports返回结果为文本形式的技术问题求助
问题解决步骤
你的代码存在三个核心问题,导致返回结果显示为函数文本而非实际数据:
1. 未执行函数,直接引用函数本身
在profile.js中,你直接使用dbProfile.profileInfo,这是对函数的引用而非执行,所以会输出函数的文本形式。需要改为调用函数dbProfile.profileInfo(),同时因为操作是异步的,要加await。
2. 异步数据库查询无法通过直接return获取结果
dbStart.js中的users函数使用了回调式的异步查询,回调函数里的return result不会作为users函数的返回值,必须用Promise包装异步操作才能用async/await获取结果。
3. 数据库查询结果未处理
查询返回的是对象数组,直接显示会输出数组的文本形式,需要提取其中的ExarID字段进行格式化。
修正后的代码:
dbStart.js
exports.users = async function () { return new Promise((resolve, reject) => { conn.query("SELECT ExarID FROM users", function (err, result, fields) { if (err) { console.log(err); reject(err); return; } console.log(result); resolve(result); }); }); };
dbProfile.js
const db = require("./dbStart"); module.exports = { profileInfo: async function () { const userData = await db.users(); // 提取所有ExarID并拼接成字符串,可根据需求调整格式 return userData.map(item => item.ExarID).join(', '); }, };
profile.js
const dbProfile = require("./dbProfile"); async function User(interaction) { const exarIds = await dbProfile.profileInfo(); const embed = new EmbedBuilder() .setColor(0x0099ff) .setTitle("user profile ") .setURL("https://www.youtube.com/watch?v=dQw4w9WgXcQ") // 修正URL重复的https:// .setDescription(`ExarID: ${exarIds}`); await interaction.reply({ ephemeral: true, embeds: [embed], fetchReply: true, }); return 0; }
内容的提问来源于stack exchange,提问作者Dokoa
相关产品推荐
相关产品推荐

