Estoy luchando para depurar una API NextJS que está funcionando en desarrollo (a través de localhost) pero está fallando silenciosamente en producción.
A continuación, las dos console.log statements no regresan, por lo que sospecho que la llamada textToSpeech no se ejecuta correctamente, ¿potencialmente a tiempo?
No estoy seguro de cómo rectificar, feliz de depurar como se indica para resolver esto.
const faunadb = require('faunadb') const secret = process.env.FAUNADB_SECRET_KEY const q = faunadb.query const client = new faunadb.Client({ secret }) const TextToSpeechV1 = require('ibm-watson/text-to-speech/v1') const { IamAuthenticator } = require('ibm-watson/auth') const AWS = require('aws-sdk') const { randomUUID } = require('crypto') import { requireAuth } from '@clerk/nextjs/api' module.exports = requireAuth(async (req, res) => { try { const s3 = new AWS.S3({ accessKeyId: process.env.AWS_ACCESS_KEY, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY }) const textToSpeech = new TextToSpeechV1({ authenticator: new IamAuthenticator({ apikey: process.env.IBM_API_KEY }), serviceUrl: process.env.IBM_SERVICE_URL }) const uuid = randomUUID() const { echoTitle, chapterTitle, chapterText } = req.body const synthesizeParams = { text: chapterText, accept: 'audio/mp3', voice: 'en-US_KevinV3Voice' } textToSpeech .synthesize(synthesizeParams) .then(buffer => { const s3Params = { Bucket: 'waveforms/audioform', Key: `${uuid}.mp3`, Body: buffer.result, ContentType: 'audio/mp3', ACL: 'public-read' } console.log(buffer.result) console.log(s3Params) s3.upload(s3Params, function (s3Err, data) { if (s3Err) throw s3Err console.log(`File uploaded successfully at ${data.Location}`) }) }) .catch(err => { console.log('error:', err) }) const dbs = await client.query( q.Create(q.Collection('audioform'), { data: { title: echoTitle, published: 2022, leadAuthor: 'winter', user: req.session.userId, authors: 1, playTime: 83, chapters: 1, gpt3Description: '', likes: 20, image: 'https://waveforms.s3.us-east-2.amazonaws.com/images/Mars.jpeg', trackURL: `https://waveforms.s3.us-east-2.amazonaws.com/audioform/${uuid}.mp3`, albumTracks: [ { title: chapterTitle, text: chapterText, trackURL: `https://waveforms.s3.us-east-2.amazonaws.com/audioform/${uuid}.mp3` } ] } }) ) res.status(200).json(dbs.data) } catch (e) { res.status(500).json({ error: e.message }) } })Reemplace los fragmentos asíncronos de esta manera, asumiendo que están destinados a ejecutarse secuencialmente.
try { // code removed here for clarity const buffer = await textToSpeech.synthesize(synthesizeParams); const s3Params = { Bucket: 'waveforms/audioform', Key: `${uuid}.mp3`, Body: buffer.result, ContentType: 'audio/mp3', ACL: 'public-read' } await s3.upload(s3Params).promise(); const dbs = await client.query(...); res.status(200).json(dbs.data); } catch (e) { res.status(500).json({ error: e.message }); }