Como criar um aplicativo de podcast com Next.js
Este artigo ensina como criar um aplicativo de podcast utilizando o framework Next.js. Ele aborda a criação de componentes reutilizáveis, a realização de solicitações de API e a implantação do aplicativo na AWS.
next
23 abr 2023
![Como criar um aplicativo de podcast com Next.js](/_next/image?url=https%3A%2F%2Fimages.prismic.io%2Fblogjavascript%2F3ee315ca-b58e-470d-a944-972714f63ae8_3.jpg%3Fauto%3Dcompress%2Cformat&w=3840&q=75)
Criar um aplicativo de podcast é uma ótima maneira de explorar os recursos do Next.js e criar uma aplicação rica em recursos que permite que seus usuários escutem e descubram novos podcasts.
Neste tutorial, mostraremos como criar um aplicativo de podcast usando o Next.js e algumas bibliotecas populares.
Pré-requisitos
Antes de começar, você precisará ter o Node.js e o npm instalados em sua máquina.
Você também precisará ter uma conta no serviço de hospedagem de arquivos da Amazon, o Amazon S3, para armazenar os arquivos de áudio do seu podcast.
Configurando o projeto
Para começar, crie um novo diretório para o seu projeto e abra-o em seu terminal.
Em seguida, execute o seguinte comando para criar um novo projeto Next.js:
npx create-next-app my-podcast-app
Isso criará um novo projeto Next.js em um diretório chamado my-podcast-app. Em seguida, acesse o diretório do projeto usando o seguinte comando:
cd my-podcast-app
Configurando as dependências
Agora que temos um novo projeto Next.js, precisamos adicionar algumas dependências para criar nosso aplicativo de podcast.
Execute o seguinte comando no terminal para instalar as dependências necessárias:
npm install --save react react-dom next @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons @fortawesome/react-fontawesome axios moment next-s3-upload query-string
Aqui está uma breve descrição de cada uma das dependências que estamos instalando:
- react, react-dom e next: são as dependências básicas para criar um aplicativo Next.js.
- @fortawesome/fontawesome-svg-core, @fortawesome/free-solid-svg-icons e @fortawesome/react-fontawesome: são as dependências para usar ícones em nosso aplicativo.
- axios: é uma biblioteca para fazer solicitações HTTP.
- moment: é uma biblioteca para manipular datas.
- next-s3-upload: é uma biblioteca para fazer upload de arquivos para o Amazon S3.
- query-string: é uma biblioteca para analisar e serializar strings de consulta.
Criando os componentes
Agora que temos todas as dependências instaladas, podemos começar a criar os componentes para nosso aplicativo de podcast.
Header
Vamos começar criando o componente de cabeçalho do nosso aplicativo.
Crie um novo arquivo chamado Header.js em um diretório chamado components. Em seguida, adicione o seguinte código:
import React from 'react'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faPodcast } from '@fortawesome/free-solid-svg-icons'; const Header = () => { return ( <div className="header"> <div className="logo"> <FontAwesomeIcon icon={faPodcast} /> <span>My Podcast App</span> </div> </div> ); }; export default Header;
Este componente exibe o logotipo do nosso aplicativo de podcast, que consiste em um ícone de microfone e o nome do aplicativo.
Footer
Em seguida, vamos criar o componente do rodapé do nosso aplicativo.
Crie um novo arquivo chamado Footer.js em um diretório chamado components. Em seguida, adicione o seguinte código:
import React from 'react'; const Footer = () => { return ( <div className="footer"> <span>© 2023 My Podcast App. All rights reserved.</span> </div> ); }; export default Footer;
Este componente exibe uma mensagem de direitos autorais no rodapé do nosso aplicativo.
PodcastList
Em seguida, vamos criar o componente de lista de podcasts.
Crie um novo arquivo chamado PodcastList.js em um diretório chamado components.
Em seguida, adicione o seguinte código:
import React from 'react'; import axios from 'axios'; import moment from 'moment'; const PodcastList = ({ podcasts }) => { return ( <div className="podcast-list"> {podcasts.map((podcast) => ( <div key={podcast.id} className="podcast-item"> <div className="podcast-image"> <img src={podcast.image} alt={podcast.title} /> </div> <div className="podcast-info"> <div className="podcast-title">{podcast.title}</div> <div className="podcast-date"> {moment(podcast.date).format('MMM D, YYYY')} </div> <div className="podcast-description">{podcast.description}</div> <audio controls> <source src={podcast.audio} type="audio/mpeg" /> </audio> </div> </div> ))} </div> ); }; export default PodcastList;
Este componente exibe uma lista de podcasts com informações como título, data, descrição e áudio.
HomePage
Agora que criamos nossos componentes, vamos criar a página inicial do nosso aplicativo de podcast.
Crie um novo arquivo chamado index.js em um diretório chamado pages.
Em seguida, adicione o seguinte código:
import React, { useEffect, useState } from 'react'; import Head from 'next/head'; import axios from 'axios'; import queryString from 'query-string'; import Header from '../components/Header'; import Footer from '../components/Footer'; import PodcastList from '../components/PodcastList'; const HomePage = () => { const [podcasts, setPodcasts] = useState([]); useEffect(() => { const fetchPodcasts = async () => { const response = await axios.get('/api/podcasts'); setPodcasts(response.data); }; fetchPodcasts(); }, []); return ( <div className="page"> <Head> <title>My Podcast App</title> <link rel="icon" href="/favicon.ico" /> </Head> <Header /> <div className="content"> <PodcastList podcasts={podcasts} /> </div> <Footer /> </div> ); }; export default HomePage;
Este componente exibe uma lista de podcasts na página inicial do nosso aplicativo de podcast.
Ele usa o componente PodcastList que criamos anteriormente.
API
Agora que criamos nossa página inicial, precisamos criar a API para buscar os podcasts do servidor.
Crie um novo diretório chamado api e um arquivo chamado podcasts.js.
Em seguida, adicione o seguinte código:
import AWS from 'aws-sdk'; import nextS3Upload from 'next-s3-upload'; AWS.config.update({ region: 'us-east-1', accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, }); const s3 = new AWS.S3(); const handler = nextS3Upload({ bucketName: process.env.S3_BUCKET_NAME, aws: AWS, }); export default handler;
Este código usa as credenciais da AWS para criar uma nova instância do serviço S3.
Ele também cria um manipulador de upload usando a biblioteca next-s3-upload.
Conclusão
Com este artigo, você aprendeu como criar um aplicativo de podcast com Next.js.
Aprendemos a criar componentes reutilizáveis, como fazer solicitações de API e como implantar nosso aplicativo na AWS.