javascript 仅在刷新页面后推送器才工作

h7appiyu  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(110)

我正在使用nextjs在一个web应用程序中实现pusher。它在我的开发环境中按预期工作。但是当我将它部署到vercel时,它不能正常工作。只有在浏览器中刷新页面时才能看到结果。
这是客户端的实现:

useEffect(() => {

    const pusher = new Pusher(`${process.env.PUSHER_KEY}`, {
        cluster: `${process.env.PUSHER_CLUSTER}`,
        useTLS: true
    });

    const channel = pusher.subscribe('franks-auto-spa');
    channel.bind('cancel-wash', data => {
        console.log(data.date);
        removeWash(data.date);
    });

}, []);

下面是API的实现:

export default async (req, res) => {

    const connection = await mysql.createConnection(process.env.DATABASE_URL);
    console.log(req.body.date);
    const result = await connection.query('DELETE FROM ongoing WHERE date = ?', [req.body.date]);
    console.log(result);

    const pusher = new Pusher({
        appId: `${process.env.PUSHER_ID}`,
        key: `${process.env.PUSHER_KEY}`,
        secret: `${process.env.PUSHER_SECRET}`,
        cluster: `${process.env.PUSHER_CLUSTER}`,
        useTLS: true
    });

    pusher.trigger('franks-auto-spa', 'cancel-wash', req.body);
    res.json({message: 'Wash deleted deleted...'});
}

我是否缺少Vercel中的任何配置?

7kqas0il

7kqas0il1#

我也遇到过这样的问题,一两次; Vercel在一小段时间后超时。(10秒的爱好)所以使用数据库与Vercel可能是不会飞。你有没有试过转换到Pro计划?或者您可以切换到Heroku,它不仅有更长的超时时间(30秒),而且还有supports websockets

vuv7lop3

vuv7lop32#

很抱歉我回复晚了。我也是刚知道。只需添加await即可防止无服务器功能被关闭!

pusher.trigger('franks-auto-spa', 'cancel-wash', req.body);

await pusher.trigger('franks-auto-spa', 'cancel-wash', req.body);
mspsb9vt

mspsb9vt3#

对于那些遇到同样问题的人,等待**pusher.trigger()**方法可以解决这个问题。

await pusher.trigger("channel-id", "incoming-message", "your-message")

相关问题