Bem-vindo ao meu tutorial React e Node para construir um site de comércio eletrônico totalmente funcional, exatamente como o Amazon. Abra seu editor de código e siga-me pelas próximas horas para construir um site de comércio eletrônico usando pilha MERN (MongoDB, ExpressJS, React e Node.JS).
Heroku: https://react-amazona.herokuapp.com
Espelho Heroku: https://react-amazona-mirror.herokuapp.com
HTML5 e CSS3: elementos semânticos, grade CSS, Flexbox
React: Componentes, Props, Eventos, Ganchos, Roteador, Axios
Redux: Loja, Redutores, Ações
Node e Express: API Web, analisador de corpo, upload de arquivo, JWT
MongoDB: Mongoose, Agregação
Desenvolvimento: ESLint, Babel, Git, Github,
Implantação: Heroku
Assista ao tutorial de React e Node
$ git clone [email protected]:basir/amazona.git $ cd amazona
MongoDB local
Instale-o aqui
Crie o arquivo .env na pasta raiz
Definir MONGODB_URL=mongodb://localhost/amazona
Atlas Cloud MongoDB
Crie banco de dados em https://cloud.mongodb.com
Crie o arquivo .env na pasta raiz
Defina MONGODB_URL=mongodb+srv://sua-conexão-db
$ npm install $ npm start
# open new terminal $ cd frontend $ npm install $ npm start
Execute isto no Chrome: http://localhost:5000/api/users/seed
Ele retorna e-mail e senha do administrador
Execute isto no Chrome: http://localhost:5000/api/products/seed
Ele cria 6 produtos de amostra
Execute http://localhost:3000/signin
Digite o e-mail e a senha do administrador e clique em entrar
Perguntas/Respostas: https://webacademy.pro/amazona
Instrutor de contato: Basir
Introdução a este curso
o que você vai construir
o que você aprenderá
quem é o público
Instalar ferramentas
Editor de código
Navegador da Web
Extensão de código VS
Modelo de site
Criar pasta amazona
criar pasta de modelo
criar index.html
adicionar código HTML padrão
link para estilo.css
criar cabeçalho, principal e rodapé
elementos de estilo
Exibir produtos
criar div de produtos
adicionar atributos do produto
adicione link, imagem, nome e preço
Criar aplicativo React
interface npx create-react-app
npm início
Remova arquivos não utilizados
copie o conteúdo index.html para App.js
copie o conteúdo style.css para index.css
substitua classe por className
Compartilhe código no Github
Inicializar repositório git
Confirmar alterações
Criar conta no GitHub
Criar repositório no github
conectar o repositório local ao repositório do github
enviar alterações para o github
Criar classificação e componente de produto
criar componentes/Rating.js
criar div.rating
estilo div.rating, span e último span
Criar componente de produto
Usar componente de classificação
Construir tela do produto
Instale react-router-dom
Use BrowserRouter e Route para tela inicial
Crie HomeScreen.js
Adicione o código da lista de produtos lá
Crie ProductScreen.js
Adicionar nova rota dos detalhes do produto ao App.js
Crie 3 colunas para imagem, informações e ação do produto
Criar servidor Node.JS
execute npm init na pasta raiz
Atualizar tipo de conjunto package.json: módulo
Adicione .js às importações
npm instalar expresso
criar servidor.js
adicione o comando start como nó backend/server.js
exigir expresso
criar rota para / retornar backend está pronto.
mover products.js do front-end para o back-end
criar rota para /api/produtos
devolver produtos
execute npm start
Carregar produtos do back-end
editar HomeScreen.js
definir produtos, carregamento e erro.
criar useEffect
defina fetchData assíncrono e chame-o
instalar eixos
obter dados de /api/produtos
mostre-os na lista
criar componente de carregamento
criar componente de caixa de mensagem
use-os na tela inicial
Instale ESlint para código Linting
instale a extensão VSCode eslint
npm instalar -D eslint
execute ./node_modules/.bin/eslint --init
Crie ./frontend/.env
Adicione SKIP_PREFLIGHT_CHECK=true
Adicionar Redux à tela inicial
npm instalar redux reagir-redux
Crie store.js
initState= {produtos:[]}
redutor = (estado, ação) => switch LOAD_PRODUCTS: {produtos: action.payload}
exportar createStore padrão (redutor, initState)
Editar HomeScreen.js
shopName = useSelector(estado=>estado.produtos)
const expedição = useDispatch()
useEffect(()=>dispatch({tipo: LOAD_PRODUCTS, carga útil: dados})
Adicionar loja ao index.js
Adicionar Redux à tela do produto
criar constantes, ações e redutores de detalhes do produto
adicione redutor ao store.js
usar ação em ProductScreen.js
adicione /api/product/:id à API de back-end
Lidar com o botão Adicionar ao carrinho
Lidar com Adicionar ao carrinho em ProductScreen.js
crie CartScreen.js
Implementar ação Adicionar ao carrinho
criar constantes, ações e redutores addToCart
adicione redutor ao store.js
usar ação em CartScreen.js
renderizar cartItems.length
Construir tela de carrinho
crie 2 colunas para itens do carrinho e ação do carrinho
cartItems.length === 0? carrinho está vazio
mostrar imagem do item, nome, quantidade e preço
Botão Prosseguir para Checkout
Implementar ação de remoção do carrinho
Implementar ação Remover do carrinho
criar constantes, ações e redutores removeFromCart
adicione redutor ao store.js
usar ação em CartScreen.js
Crie usuários de exemplo no MongoDB
npm instalar mangusto
conectar-se ao mongodb
crie config.js
npm instalar dotenv
exportar MONGODB_URL
criar modelos/userModel.js
crie userSchema e userModel
criar userRoute
Dados de amostra de sementes
Crie produtos de amostra no MongoDB
criar modelos/productModel.js
crie productSchema e productModel
criar productRoute
Dados de amostra de sementes
Criar back-end de login
criar/fazer login na API
verificar e-mail e senha
gerar token
instalar token web json
instalar dotenv
retornar token e dados
teste-o usando o carteiro
Tela de login do design
criar tela de login
renderizar campos de e-mail e senha
criar constantes de login, ações e redutores
Atualizar cabeçalho com base no login do usuário
Implementar ação de login
criar constantes de login, ações e redutores
adicione redutor ao store.js
usar ação em SigninScreen.js
Criar tela de cadastro
criar API para /api/users/register
inserir novo usuário no banco de dados
retornar informações do usuário e token
criar tela de registro
Adicionar campos
Campos de estilo
Adicionar tela ao App.js
criar ação de registro e redutor
verifique a validação e crie o usuário
Criar tela de envio
criar componente CheckoutSteps.js
criar campos de envio
implementar constantes de envio, ações e redutores
Criar tela de pagamento
criar campos de pagamento
implementar constantes de envio, ações e redutores
Projetar tela de pedido
campos de resumo do pedido de design
ação de ordem de projeto
API de criação de pedido
API createOrder
criar modelo de pedido
criar pedidoRouter
criar rota de pós-pedido
Implementar ação PlaceOrder
lidar com o botão fazer pedido, clique
criar constantes de ordem de lugar, ação e redutor
Tela Criar Pedido
construir API de pedido para /api/orders/:id
crie OrderScreen.js
ação de detalhes do pedido de envio em useEffect
carregar dados com useSelector
mostrar dados como tela de pedido
criar detalhes do pedido constante, ação e redutor
Adicionar botão PayPal
obter ID do cliente do paypal
configure-o no arquivo .env
criar formulário de rota /api/paypal/clientId
crie getPaypalClientID em api.js
adicionar script de checkout do PayPal em OrderScreen.js
mostrar botão do paypal
Implementar pagamento de pedidos
atualizar pedido após pagamento
crie payOrder em api.js
crie rota para /:id/pay em orderRouter.js
renderizar novamente após ordem de pagamento
Exibir histórico de pedidos
criar API de pedidos de clientes
criar API para getMyOrders
mostrar pedidos na tela do perfil
pedidos de estilo
Exibir perfil de usuário
criar API de detalhes do usuário
mostrar informações do usuário
Atualizar perfil de usuário
criar API de atualização de usuário
atualizar informações do usuário
Criar visualização de administrador
Criar menu de administração
Crie middleware administrativo no back-end
Criar rota administrativa no frontend
Listar produtos
Criar tela de lista de produtos
Adicionar redutor à loja
mostrar produtos na tela
Criar produto
construir criar API de produto
construir Botão Criar Produto
definir produto criar constante, ação e redutor
usar ação na tela de lista de produtos
Tela de edição do produto de construção
criar tela de edição
definir estado
criar campos
carregar detalhes do produto
adicionar às rotas
Atualizar produto
definir API de atualização
definir constante de atualização do produto, ação e redutor
usar ação na tela de edição do produto
Carregar imagem do produto
npm instalar multer
definir roteador de upload
criar pasta de uploads
Lidar com front-end
Excluir produto
criar API de exclusão no back-end
criar constantes de exclusão, ação e redutor
use-o na tela da lista de produtos
Listar pedidos
criar API de lista de pedidos
criar tela de lista de pedidos
Adicionar redutor à loja
mostrar produtos na tela
Excluir pedido 2. criar ação de exclusão de pedido e redutor 3. adicionar ação de exclusão de pedido à lista de pedidos
Entregar pedido
criar constantes, ações e redutores para entrega do pedido
adicionar ação de entrega do pedido à tela de detalhes do pedido
Publicar no Heroku
Criar repositório git
Criar conta heroku
instalar Heroku CLI
login do heroku
aplicativos heroku:crie a Amazon
Edite package.json para script de construção
Criar perfil
Criar banco de dados atlas mongodb
Defina a conexão do banco de dados nas variáveis env do heroku
Comprometa-se e empurre
Listar usuários
construir API para usuários de lista
Criar tela UserList
criar detalhes do pedido constante, ação e redutor
Excluir usuários
construir API para excluir usuários
criar detalhes do pedido constante, ação e redutor
Use ação em UserListScreen
Editar usuário
construir API para atualizar usuários
criar interface de tela de edição
Implementar visão do vendedor
adicionar menu do vendedor
criar rota do vendedor
listar produtos para vendedor
listar pedidos para o vendedor
adicionar vendedor à lista de produtos e tela de detalhes
Criar página do vendedor
criar página de vendedor
atualizar componente do produto e tela do produto
atualizar rotas de produtos
Adicionar carrossel mais vendido
instalar carrossel de reação
implementar ações e redutores para os mais vendidos
use o carrossel de reação com dados na tela inicial
Forçar itens de pedido de um vendedor
atualize a ação addToCart para comprar de um vendedor em um pedido
Criar caixa de pesquisa e tela de pesquisa
criar barra de pesquisa em Header.js
adicionar estilo
lidar com formulário de envio
edite o URL de análise para obter a string de consulta
atualizar API da lista de produtos para pesquisa por nome
Adicionar filtro de pesquisa avançada 1. filtrar por categoria 2. filtrar por faixa de preço 3. filtrar por classificação média
Pesquisa avançada completa 1. filtrar por preço 2. filtrar por classificação 3. classificar por preço, classificação, ...
Avalie e avalie produtos 1. avalie produtos 2. crie ações e redutores
Escolha o endereço no mapa do Google 1. crie credenciais de mapa do Google 2. atualize o arquivo .env com a chave da API do Google 3. crie uma API para enviar a API do Google para o frontend 4. crie a tela do mapa 5. busque a API do Google 6. getUserLocation 7. instale @react- google-maps/api 8. use-o na tela de envio 9. aplique o mapa na tela de checkout
BugFix: executando localmente sem problemas
adicione informações do vendedor ao data.js
semear dados do produto com informações do administrador como vendedor
corrigir isSeller e isAdmin na atualização do usuário
remover autenticação dos detalhes do usuário
Implementar paginação
adicione paginação ao roteador do produto no back-end
aplicar número de página a ações e redutores no frontend
mostrar números de página na tela de pesquisa
Recibo de pedido por e-mail pelo mailgun 1. crie uma conta mailgun 2. adicione e verifique seu domínio no mailgun 3. instale o mailgun-js 4. defina a chave da API no arquivo env 5. altere a ordem de pagamento no orderRouter 6. envie o e-mail para
Criar tela do painel
Crie dados de gráfico no back-end
Tela Construir Gráfico
Implementar chat ao vivo com clientes
use socket io para criar back-end
criar componente de caixa de bate-papo
criar tela de suporte
Atualize para React 17, Roteador 6, Mongoose 6
Back-end
Desinstale e instale todos os pacotes
remover opções no mongoose connect
envolva mailgun em try catch em orderRouter
Front-end
Desinstale e instale todos os pacotes
remover na caixa de pesquisa
envolva tudo
substitua por <Route element={}>
substitua por <Route element={ }/>
substituir e também
Atualizar PrivateRoute, AdminRoute e SellerRoute
substitua push() por navigation() de useNavigate
substitua props.match.params.id por const params = useParams();
substitua props.location.search por const {search} = useLocation(); e URLSearchParams
substitua props.match.path por const {pathname} = useLocation();
coloque userInfo em useEffect no ChatBox, SupportScreen