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

Node.js开发WhatsApp机器人遇报错:client未初始化就绑定事件

WhatsApp Web JS机器人异步初始化问题解决

我正在使用whatsapp-web-js包开发WhatsApp聊天机器人,但作为Node.js及异步代码新手,遇到了实现问题。

原代码

let client;
    
//Connect to the database to get old persisted session data 

mongoose.connect('mongodb+srv://...url').then(() => {
    //once connected, create new session "client" with persisted data
    const store = new MongoStore({ mongoose: mongoose });
    client = new Client({
        authStrategy: new RemoteAuth({
            store: store,
            backupSyncIntervalMs: 60000
        })
    });
    ready = false;
    client.initialize().then(r => console.log("Initializing whatsapp client"));

    //Generate QR Code if needed
    const qrcode = require('qrcode-terminal');
    client.on('qr', qr => {
        qrcode.generate(qr, {small: true});
    });
});

//Client has saved remote session
client.on('remote_session_saved', () => {
    console.log('Client remote session saved');
});

//Client is ready to send/receive requests
client.on('ready', () => {
    console.log('Client is ready to send/receive requests');
});

问题原因

触发空指针错误的核心是Node.js的异步执行特性:mongoose.connect()是异步操作,会在后台执行数据库连接,而主线程会继续执行后续绑定事件的代码——此时client还未被初始化,处于undefined状态,自然会报错。

解决方法

把所有需要操作client的代码(包括事件监听)都放到mongoose.connect()的then回调内部,确保只有在数据库连接完成、client实例创建后,再去绑定事件:

const qrcode = require('qrcode-terminal');
let client;
    
//Connect to the database to get old persisted session data 

mongoose.connect('mongodb+srv://...url').then(() => {
    //once connected, create new session "client" with persisted data
    const store = new MongoStore({ mongoose: mongoose });
    client = new Client({
        authStrategy: new RemoteAuth({
            store: store,
            backupSyncIntervalMs: 60000
        })
    });
    ready = false;
    client.initialize().then(r => console.log("Initializing whatsapp client"));

    //Generate QR Code if needed
    client.on('qr', qr => {
        qrcode.generate(qr, {small: true});
    });

    //Client has saved remote session
    client.on('remote_session_saved', () => {
        console.log('Client remote session saved');
    });

    //Client is ready to send/receive requests
    client.on('ready', () => {
        console.log('Client is ready to send/receive requests');
    });
});

注:将require('qrcode-terminal')移到文件顶部,避免在回调内重复加载模块,优化代码结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:05:14