概要
タイトルの通りですが、
Next.js でpusher を使ってpub sub するとき、
api/xxx.ts
上で
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method === 'POST') {
const Pusher = require("pusher")
const pusher = new Pusher({
appId: process.env.NEXT_PUBLIC_PUSHER_APP_ID,
key: process.env.NEXT_PUBLIC_PUSHER_KEY,
secret: process.env.NEXT_PUBLIC_PUSHER_SECRET,
cluster: process.env.NEXT_PUBLIC_PUSHER_CLUSTER,
useTLS: false
});
pusher.trigger(
process.env.NEXT_PUBLIC_PUSHER_CHANNEL_NAME,
process.env.NEXT_PUBLIC_PUSHER_EVENT_NAME,
{
message: "hello world"
})
console.log(`id: ${log_id}`)
res.status(200).json({ message: 'POST request handled' });
} else {
res.status(405).end(); // Method not allowed
}
}
とやっていたところ、
Vercel上で
Unhandled Promise Rejection {"errorType":"Runtime.UnhandledPromiseRejection","errorMessage":"PusherRequestError: Request failed with an error","reason":{"errorType":"PusherRequestError","errorMessage":"Request failed with an error","name":"PusherRequestError","stack":["Error"," at new RequestError (/var/task/node_modules/.pnpm/pusher@5.1.3/node_modules/pusher/lib/errors.j
...
というようなエラーが出てきちんとtriggerできていませんでした。
このとき、Pusher のダッシュボードからtrigger を手動実行すると
Next.jsのクライアント側ではきちんとsubできていたので、trigger が問題だったとわかりました。
このとき、
https://github.com/vercel/next.js/discussions/48433#discussioncomment-5710270
こちらを参照し、
pusher.trigger
には await
が必要だったとわかりました。
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
if (req.method === 'POST') {
const Pusher = require("pusher")
const pusher = new Pusher({
appId: process.env.NEXT_PUBLIC_PUSHER_APP_ID,
key: process.env.NEXT_PUBLIC_PUSHER_KEY,
secret: process.env.NEXT_PUBLIC_PUSHER_SECRET,
cluster: process.env.NEXT_PUBLIC_PUSHER_CLUSTER,
useTLS: false
});
await pusher.trigger(
process.env.NEXT_PUBLIC_PUSHER_CHANNEL_NAME,
process.env.NEXT_PUBLIC_PUSHER_EVENT_NAME,
{
message: "hello world"
})
console.log(`id: ${log_id}`)
res.status(200).json({ message: 'POST request handled' });
} else {
res.status(405).end(); // Method not allowed
}
}
同じような現象で時間を溶かした方がいたら参考になると幸いです。
以上。