Node.js and MongoDB Image Upload API

Posted by

API de Upload de Imagens com Node.js e MongoDB

API de Upload de Imagens com Node.js e MongoDB

Neste artigo, vamos discutir como criar uma API de upload de imagens utilizando Node.js e MongoDB. Vamos abordar os passos necessários para configurar e implementar a API, bem como os aspectos importantes a serem considerados durante o desenvolvimento.

Configuração do Ambiente

Antes de começar a implementar a API, é importante garantir que o ambiente de desenvolvimento esteja configurado corretamente. Certifique-se de ter o Node.js e o MongoDB instalados em seu sistema. Além disso, recomendamos usar um gerenciador de pacotes como o npm para gerenciar as dependências do projeto.

Implementação da API

A implementação da API de upload de imagens com Node.js e MongoDB envolve a criação de rotas para lidar com as requisições de upload e recuperação de imagens. Utilize um framework como o Express.js para configurar as rotas e lidar com as requisições HTTP.

Quando um usuário fizer o upload de uma imagem, a API deve armazenar a imagem no sistema de arquivos do servidor e um documento correspondente no banco de dados MongoDB. O documento no banco de dados deve conter metadados associados à imagem, como nome do arquivo, tipo de arquivo, tamanho, etc.

Segurança e Considerações Importantes

É importante considerar a segurança ao implementar uma API de upload de imagens. Certifique-se de validar e sanitizar os dados de entrada para evitar ataques de injeção de código. Além disso, limite o tamanho e o tipo de arquivos que podem ser enviados para prevenir possíveis vulnerabilidades.

Também é recomendável considerar a otimização das imagens antes de armazená-las no servidor, a fim de reduzir o tamanho do arquivo e melhorar o desempenho da aplicação. Você pode usar bibliotecas como Sharp ou ImageMagick para realizar a otimização das imagens.

Conclusão

Uma API de upload de imagens é uma funcionalidade comum em muitas aplicações web e é importante implementá-la de forma segura e eficiente. Com as ferramentas certas, como Node.js e MongoDB, é possível criar uma API robusta e escalável para lidar com o armazenamento e recuperação de imagens.

0 0 votes
Article Rating
24 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@Pedr0-Jp
11 months ago

E para consumir?

@DOUGLAS-rt8sm
11 months ago

Matheus , quando eu dou deploy na vercel dessa api , acontece um erro (" no such file or directory, open ") , na rota post , as outras rotas estão funcionando , menos a de post p dar upload na imagem recebida , poderia me informar oque fazer ou gravar um vídeo dando deploy nessa api?

@erenildogomes5092
11 months ago

como eu faço para usar essas imagens no meu frontend

@zmurilo19
11 months ago

Quem estiver com problemas ao deletar a picture do banco de dados com a propriedade .remove() , tenta com .deleteOne()

@FGMNdesigner
11 months ago

Top dmais!!! Muito bem explicado e direto!!!

@fernandohenrique8730
11 months ago

Eu consigo hospedar uma aplicação nextjs em sites como hostinger, hostgator, locaweb e etc?

@douglasescher1172
11 months ago

como seria quando contém "type": "module" que exige o impot ?

@canaldoserja1559
11 months ago

Boa tarde, alguem sabe qual a capacidade desse banco de dados? estou fazendo um projeto para um amigo de uma farmácia, voces acham que da pra colocar bastante coisa nesse bd? ou é pequeno a capacidade dele?

@DiariosD1Dev
11 months ago

tenho uma duvida, vc usando o mogoose para fazer o schema, eu poderia usar o zod ou o join?

@sdfgsfdegsdrg-jf4tu
11 months ago

Ao deletar ta acusando o "picture.delete" por não ser uma função. O caminho já me certifiquei que está certo e realmente chega até ali o objeto.

@vagnercosta3325
11 months ago

Fala Matheus boa noite! Matheus uma dúvida até q ponto é viável salvar os arquivos em um diretório na aplicação, e qdo começar a gravar esses arquivos em um banco de dados.??? E faz uns vídeos ensinando a usar o gridfs…. Valeu abraços…

@lucasdamasceno7068
11 months ago

thanksss broo. Faz os proximos em Typescript por favor.

@DV-wr9ex
11 months ago

tenho que instalar algo pra poder usar ${port} ? em varios projetos meus nunca consegui usar esse symbol para variaveis de ambiente, valeu pelo video, muito bom!!

@DevPortifolio2004
11 months ago

faz um video sobre api desde o inicio ate o deploy, esse video me ajudou muito!

@Jack-ss4re
11 months ago

Ótima aula! Mas fiquei com uma dúvida, por que as pessoas usam porta 3000 em vez da porta padrão HTTP que é 80?

@guilvitor1979
11 months ago

Estou recebendo o seguinte error ao inserir a imagem :
TypeError: Cannot read property 'path' of undefined

no banco aparece o seguinte na url de img:
img:"C:fakepathdownload.png"

esse esse é o erro:
TypeError: Cannot read property 'path' of undefined

at cadastroLivro (file:///C:/Users/Micro/Desktop/Node-MongoDb/src/controllers/LivroController.js:32:19)

at Layer.handle [as handle_request] (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterlayer.js:95:5)

at next (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterroute.js:144:13)

at multerMiddleware (C:UsersMicroDesktopNode-MongoDbnode_modulesmulterlibmake-middleware.js:13:41)

at Layer.handle [as handle_request] (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterlayer.js:95:5)

at next (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterroute.js:144:13)

at Route.dispatch (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterroute.js:114:3)

at Layer.handle [as handle_request] (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterlayer.js:95:5)

at C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterindex.js:284:15

at Function.process_params (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterindex.js:346:12)

TypeError: Cannot read property 'path' of undefined

at cadastroLivro (file:///C:/Users/Micro/Desktop/Node-MongoDb/src/controllers/LivroController.js:32:19)

at Layer.handle [as handle_request] (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterlayer.js:95:5)

at next (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterroute.js:144:13)

at multerMiddleware (C:UsersMicroDesktopNode-MongoDbnode_modulesmulterlibmake-middleware.js:13:41)

at Layer.handle [as handle_request] (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterlayer.js:95:5)

at next (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterroute.js:144:13)

at Route.dispatch (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterroute.js:114:3)

at Layer.handle [as handle_request] (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterlayer.js:95:5)

at C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterindex.js:284:15

at Function.process_params (C:UsersMicroDesktopNode-MongoDbnode_modulesexpresslibrouterindex.js:346:12)

MongooseError: document must have an _id before saving

at C:UsersMicroDesktopNode-MongoDbnode_modulesmongooselibmodel.js:300:18

at processTicksAndRejections (internal/process/task_queues.js:77:11)

MongooseError: document must have an _id before saving

at C:UsersMicroDesktopNode-MongoDbnode_modulesmongooselibmodel.js:300:18

at processTicksAndRejections (internal/process/task_queues.js:77:11)

@calebeferreira-tic2164
11 months ago

Fala @matheus obrigado! Comprei seus cursos na udemy, estou acompanhando você. Sempre fui de infra e de Dev somente de consultoria. 2023 migrei 100% para Dev e seus videos tem me ajudado muito. Valeu garoto, para pessoas que nem eu (41 da epoca do Dephi e migrou para PHP) seus videos tem sido uma atualização constante react, nodejs. Continue com esse afinco.

@lucasbezerra2246
11 months ago

Muito bom
Wuando testei no thunde ele só deu erro mas quando teste no postman ele funcionou se alguém souber o motivo por favor me avise ✌️🧐

@iarlensantos3588
11 months ago

Olá professor, primeiramente, excelente video! Tenho uma duvida, existem outros bancos de dados relacionais que são online igual o mongo altas? parecem ser bem mais fácil de lidar kkkkk

@devalefe
11 months ago

Qualidade! Conteúdo muito bom, parabéns continue assim man! 😄👏👏👏