快速安装

问题描述

我是vercel的新手,我正在尝试部署一个包含聊天功能的应用程序。我正在使用ably.com作为发布/订阅聊天功能。我正在尝试使用可靠的实时性来发布和订阅事件,但是以某种方式在API中发布事件会引发错误。我检查了文档并正确编码。

相同的代码在localhost上运行良好,但是一旦我将其部署到vercel,它就无法工作并引发错误

我正在使用以下代码从API发布消息。

var realtime = new Ably.Realtime('<Ably key>');
var channel = realtime.channels.get('ham-gym-tag');
channel.publish('example','message data');

解决方法

在部署期间,我遇到了类似的问题。这里的要点是使用ABLY REST API(https://www.ably.io/documentation/rest)发送/发布消息,并使用ABLY Realtime订阅事件。这样,您甚至无需编写API。您可以通过Axios或类似的npm包直接调用Ably REST API。

调用以下方法将消息发送/发布到ABLY

const onSave = async () => {
let data = { name: "greeting",data: msg };
const res = await axios({
  method: "POST",headers: {
    Authorization:
      "Basic " + new Buffer(process.env.ABLY_CLIENT_ID).toString("base64"),"Content-Type": "application/json",},url: "https://rest.ably.io/channels/<channel name>/messages",data: data,});
};

请注意,您必须用您的频道名称替换,并用您的ABLY客户ID替换ABLY_CLIENT_ID。在上面的代码“名称:“问候”中,定义了将在其上发布消息的事件名称。现在,您可以在要预订事件“ greeting”的文件中编写以下代码

useEffect(() => {
var ably = new Ably.Realtime(process.env.ABLY_CLIENT_ID);
const channelAbly = ably.channels.get(<channl name>);
channelAbly.subscribe("greeting",function (message) {
  // console.log("message received for event " + message.name);
  // console.log("message data:" + message.data);
});
},[]);

请注意,您必须用您的频道名称替换,并用您的ABLY客户ID替换ABLY_CLIENT_ID。另外,如果需要,还可以将偶数名称从“问候语”更改为其他名称。

每当新消息发布到带有“问候”事件的频道时,就会触发上述代码。