JS导入函数报错:getUser is not a function 问题求助
问题排查:getUser is not a function 错误
运行createCron函数时始终报错“getUser not a function”,但getUser已在对应文件中定义并导出,以下是相关代码及排查方向:
1. BotJobActions.js
定义异步函数getUser(根据jobId查询关联用户),并与其他函数一同导出:
const getUser = async (jobId) =>{ await mongoConnect(process.env.DB_PWORD) try { const user = await User.findOne({pendingJobs:jobId}) return user } catch (err) { console.log(err) } } module.exports = { newJob, getUserJobs, getUser, updateUserJob, destroyUserPendingJob, destroyUserCompletedJob, activateJob, deactivateJob, endJob }
2. TestDate.js
导入getUser,定义runBot函数(遍历任务并调用getUser获取用户),同时导出runBot等函数:
const { getUser } = require("../bot/botJobActions"); const runBot = async (todayJobs) =>{ // await mongoConnect(process.env.DB_PWORD) for(const job of todayJobs){ const clubPassword = decryptToken(job.clubPassword.token, job.clubPassword.iv) const user = await getUser(job.id) if(job.proxy){ const proxyConfig = await getProxyConfig(user) if(proxyConfig.status === "no proxy") console.log("[-] Proxy Config Retrival Error/Running Without Proxy") // await startBot(member=job.member?job.member : null, proxy=proxyConfig.status === 'success'?proxyConfig:null, job.clubUsername, clubPassword, job.startTime, job.endTime, job.courseList, job.id) await console.log(member=job.member?job.member : null, proxy=proxyConfig.status === 'success'?proxyConfig:null, job.clubUsername, clubPassword, job.startTime, job.endTime, job.courseList, job.id) }else{ // await startBot(member=job.member?job.member : null, proxy=null, job.clubUsername, clubPassword, job.startTime, job.endTime, job.courseList, job.id) await console.log(member=job.member?job.member : null, proxy=null, job.clubUsername, clubPassword, job.startTime, job.endTime, job.courseList, job.id) } } return } module.exports = { runBot, getJobs }
3. CreateCron.js
导入runBot,定义createCron函数(创建定时任务在指定时间调用runBot):
const schedule = require('node-schedule'); const { runBot } = require('./testDate'); const createCron = (job) =>{ const startDate = new Date(job.botStartDate) const startTime = new Date(`09/19/2000 ${job.botStartTime}`) startDate.setHours(startTime.getHours()) startDate.setMinutes(startTime.getMinutes()) console.log(startDate.toUTCString()) schedule.scheduleJob(startDate, async function(){ console.log('run job') await runBot([job]) }) }
排查方向:
- 文件路径验证:检查
TestDate.js中require("../bot/botJobActions")的相对路径是否正确。可在TestDate.js开头添加console.log(require("../bot/botJobActions")),查看导出对象是否包含getUser。 - 模块缓存清理:Node.js会缓存已加载的模块,若修改过
BotJobActions.js未重启服务,可能仍使用旧缓存。尝试重启应用,或用nodemon等工具自动刷新模块。 - 导出拼写检查:确认
BotJobActions.js中导出的getUser大小写、拼写完全正确,没有被其他代码覆盖或重定义。 - 导入模块完整性:检查
BotJobActions.js中mongoConnect、User是否已正确导入,若这些依赖加载失败,会导致模块导出异常。 - 定时任务上下文验证:在
runBot函数开头添加console.log(typeof getUser),确认定时任务触发时getUser的类型,排查是否存在上下文丢失问题。
内容的提问来源于stack exchange,提问作者Carter James
相关产品推荐
相关产品推荐

