You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用node-schedule遇TypeError: job.start is not a function错误求助

解决TypeError: job.start is not a function及代码中的其他问题

核心错误修复

  • 移除job.start()调用:在node-schedule库中,调用schedule.scheduleJob()时,任务会自动启动,返回的Job对象并不包含start()方法,这就是触发TypeError的直接原因。直接删除job.start()这一行即可解决该报错。

代码中其他关键问题及修正建议

除了上述报错,你的代码还存在几个会导致任务无法正常运行的问题:

  1. whois模块使用错误:你调用的whois.getRegisteredDomains()方法不存在,该模块仅用于查询单个域名的WHOIS信息,无法直接获取每日新注册域名列表。要获取新注册域名,你需要使用域名注册局的官方API(如Verisign的New gTLD数据接口)或第三方合规数据源。
  2. Node.js环境无pandas库:pandas是Python专属的数据处理库,Node.js无法直接使用。可以替换为csv-writer、fast-csv等Node.js原生CSV处理工具。
  3. smtp模块使用不当:原生smtp模块配置复杂,推荐使用成熟的nodemailer库来处理邮件发送,它封装了SMTP的底层逻辑,使用更简洁。
  4. 日期过滤逻辑有误:new Date()生成的是当前精确时间,你需要筛选今日注册的域名,应将日期范围设置为今日0点至当前时间,否则只会匹配注册时间晚于当前时刻的域名。

修正后的代码示例

首先安装所需依赖:

npm install node-schedule whois nodemailer csv-writer

替换后的完整代码:

import schedule from 'node-schedule';
import whois from 'whois';
import createCsvWriter from 'csv-writer';
import nodemailer from 'nodemailer';

// 示例:获取新注册域名(实际需替换为官方API或合规数据源)
async function getNewRegisteredDomains() {
    // 这里仅用模拟数据演示,实际需替换为真实获取逻辑
    const sampleDomains = ['example-new-domain.com', 'test-new-domain.org'];
    const domainRecords = [];

    for (const domain of sampleDomains) {
        try {
            const data = await new Promise((resolve, reject) => {
                whois.lookup(domain, (err, data) => {
                    if (err) reject(err);
                    else resolve(data);
                });
            });
            // 解析WHOIS数据(不同域名后缀格式不同,需按需适配)
            domainRecords.push({
                name: data.registrant?.name || 'N/A',
                domain: domain,
                email: data.registrant?.email || 'N/A',
                phone: data.registrant?.phone || 'N/A',
                registeredDate: data.created || 'N/A'
            });
        } catch (err) {
            console.error(`查询域名${domain}失败:`, err);
        }
    }

    // 筛选今日注册的域名
    const today = new Date();
    today.setHours(0, 0, 0, 0);
    return domainRecords.filter(record => {
        if (!record.registeredDate) return false;
        const regDate = new Date(record.registeredDate);
        return regDate >= today;
    });
}

// 配置邮件发送器(Gmail需使用应用专用密码)
const transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: 'mpainkra7@gmail.com',
        pass: 'your-app-specific-password'
    }
});

// 定时任务:每天10点执行
const job = schedule.scheduleJob('0 10 * * *', async () => {
    try {
        const filteredDomains = await getNewRegisteredDomains();
        if (filteredDomains.length === 0) {
            console.log('今日无新注册域名');
            return;
        }

        // 生成CSV文件
        const csvWriter = createCsvWriter.createObjectCsvWriter({
            path: 'domains.csv',
            header: [
                { id: 'name', title: '名称' },
                { id: 'domain', title: '域名' },
                { id: 'email', title: '邮箱ID' },
                { id: 'phone', title: '电话号码' },
                { id: 'registeredDate', title: '注册日期' }
            ]
        });
        await csvWriter.writeRecords(filteredDomains);
        console.log('CSV文件已生成');

        // 发送带附件的邮件
        const mailOptions = {
            from: 'mpainkra7@gmail.com',
            to: 'tuktukpainkra7@gmail.com',
            subject: '每日新注册域名WHOIS记录',
            text: `今日共发现${filteredDomains.length}个新注册域名,详情请查看附件。`,
            attachments: [{
                filename: 'domains.csv',
                path: './domains.csv'
            }]
        };

        await transporter.sendMail(mailOptions);
        console.log('邮件发送成功');
    } catch (err) {
        console.error('任务执行失败:', err);
    }
});

console.log('定时任务已启动,每天10点执行');

内容的提问来源于stack exchange,提问作者Mayank Painkra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:52:22