{"id":38631,"date":"2024-07-19T08:00:00","date_gmt":"2024-07-19T11:00:00","guid":{"rendered":"https:\/\/king.host\/blog\/?p=38631"},"modified":"2026-04-06T10:19:59","modified_gmt":"2026-04-06T13:19:59","slug":"como-criar-servidor-localhost-nodejs","status":"publish","type":"post","link":"https:\/\/king.host\/blog\/servicos-de-hospedagem\/como-criar-servidor-localhost-nodejs\/","title":{"rendered":"Como criar servidor em localhost Node.js"},"content":{"rendered":"\n<p>Por mais t\u00e9cnico e burocr\u00e1tico que possa parecer, a escolha da stack tecnol\u00f3gica \u00e9 uma decis\u00e3o que impacta toda a sua opera\u00e7\u00e3o: da produtividade da equipe at\u00e9 a performance da aplica\u00e7\u00e3o e a capacidade de escalar a infraestrutura.<\/p>\n\n\n\n<p>\u00c9 por isso que, antes de entender <strong>como criar servidor em localhost Node.js<\/strong>, voc\u00ea precisa entender o que \u00e9 essa tecnologia, como ela funciona e, \u00e9 claro, quais s\u00e3o os desafios e benef\u00edcios de seguir essa alternativa.<\/p>\n\n\n\n<p>O que acha de tirar todas essas d\u00favidas agora mesmo? Continue a leitura e confira!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>O que \u00e9 Node.js?<\/strong><\/h3>\n\n\n\n<p>O <a href=\"https:\/\/king.host\/blog\/tecnologia\/o-que-e-nodejs\/\">Node.js<\/a> \u00e9 um ambiente de execu\u00e7\u00e3o (runtime environment) de JavaScript do lado do servidor (server-side), constru\u00eddo sobre o motor V8 do Google Chrome.<\/p>\n\n\n\n<p>Sua principal proposta de valor, que o distingue de outras tecnologias de back-end, reside em sua arquitetura orientada a eventos e seu modelo de entrada e sa\u00edda (E\/S ou I\/O) n\u00e3o bloqueante.<\/p>\n\n\n\n<p>Vamos explicar um pouco mais: quando qualquer opera\u00e7\u00e3o de I\/O \u00e9 feita, como uma consulta a um banco de dados ou a leitura de um arquivo, o Node.js delega essa tarefa ao sistema operacional e continua a processar outras requisi\u00e7\u00f5es.<\/p>\n\n\n\n<p>Quando essa opera\u00e7\u00e3o \u00e9 conclu\u00edda, um evento de callback \u00e9 adicionado \u00e0 fila de eventos, que ser\u00e1 processado pelo loop assim que poss\u00edvel. Essa arquitetura torna o Node.js mais eficiente para lidar com in\u00fameras conex\u00f5es simult\u00e2neas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pr\u00e9-requisitos para criar um servidor em Node.js<\/strong><\/h3>\n\n\n\n<p>Mas antes de qualquer mudan\u00e7a, \u00e9 preciso configurar o ambiente para um desenvolvimento realmente eficiente.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Instala\u00e7\u00e3o do node.js e gerenciamento com NVM<\/h4>\n\n\n\n<p>O primeiro passo \u00e9 a instala\u00e7\u00e3o do pr\u00f3prio Node.js. Por\u00e9m, em um ambiente profissional, onde voc\u00ea pode trabalhar em m\u00faltiplos projetos com diferentes requisitos de vers\u00e3o, a instala\u00e7\u00e3o direta pode se tornar um problema.<\/p>\n\n\n\n<p>A melhor pr\u00e1tica \u00e9 utilizar um gerenciador de vers\u00f5es como o<strong> NVM (Node Version Manager)<\/strong>. O <strong>NVM <\/strong>permite que voc\u00ea instale e alterne entre diferentes vers\u00f5es do Node.js com um simples comando, garantindo que cada projeto utilize a vers\u00e3o exata com a qual foi desenvolvido, e assim evitando conflito de compatibilidade.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">NPM: o gerenciador de pacotes do ecossistema<\/h4>\n\n\n\n<p>Juntamente com o Node.js vem o <a href=\"https:\/\/king.host\/wiki\/artigo\/npm-nodejs\/\"><strong>NPM<\/strong><\/a><strong> <\/strong><strong>(Node Package Manager)<\/strong>, o<strong> <\/strong>maior reposit\u00f3rio de pacotes de software do mundo.<\/p>\n\n\n\n<p>Essa \u00e9 a ferramenta utilizada para gerenciar as depend\u00eancias do seu projeto. Atrav\u00e9s do arquivo {package.json}, que funciona como o manifesto do projeto, voc\u00ea declara todas as bibliotecas e <a href=\"https:\/\/king.host\/blog\/tecnologia\/6-frameworks-php\/\">frameworks<\/a> de que sua aplica\u00e7\u00e3o precisa.<\/p>\n\n\n\n<p>Ao executar o comando {npm install}, o <strong>NPM <\/strong>baixa e instala todas essas depend\u00eancias na pasta {node_modules}, garantindo que o ambiente se reproduza em qualquer m\u00e1quina.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Ambiente de desenvolvimento e controle de vers\u00e3o<\/h4>\n\n\n\n<p>O uso de uma IDE (Ambiente de Desenvolvimento Integrado), como o Visual Studio Code, pode facilitar bastante a vida do desenvolvedor, principalmente em servidores de teste criados em localhost, j\u00e1 que oferece recursos como depura\u00e7\u00e3o, autocompletar e integra\u00e7\u00e3o com outras ferramentas.&nbsp;<\/p>\n\n\n\n<p>No entanto, n\u00e3o \u00e9 um pr\u00e9-requisito para criar um servidor em Node.js: muitos servidores reais nem sequer utilizam ambiente visual e s\u00e3o acessados apenas via terminal.<\/p>\n\n\n\n<p>Da mesma forma, o uso de sistemas de controle de vers\u00e3o, como o <a href=\"https:\/\/king.host\/blog\/tecnologia\/comandos-git\/\">Git<\/a>, n\u00e3o \u00e9 obrigat\u00f3rio, mas \u00e9 altamente recomendado quando o objetivo \u00e9 desenvolver sistemas mais complexos, colaborar com outras pessoas ou manter um hist\u00f3rico organizado das altera\u00e7\u00f5es.&nbsp;<\/p>\n\n\n\n<p>Em resumo, tanto IDEs quanto Git s\u00e3o opcionais, mas podem ser interessantes para quem deseja ter mais praticidade no desenvolvimento e gerenciamento do projeto.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Criando seu primeiro servidor em localhost<\/strong><\/h3>\n\n\n\n<p>Um jeito simples de criar seu primeiro servidor em localhost \u00e9 utilizando o framework Express.js, bastante popular no ecossistema Node.js.&nbsp;<\/p>\n\n\n\n<p>Vale destacar que esse tipo de configura\u00e7\u00e3o \u00e9 indicada principalmente para <strong>testes e aprendizado<\/strong> \u2014 em produ\u00e7\u00e3o, \u00e9 importante considerar pr\u00e1ticas e ferramentas adicionais para garantir seguran\u00e7a, escalabilidade e desempenho.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>O passo a passo \u00e9 bem simples:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Inicialize o projeto:<\/strong> abra seu terminal, crie um novo diret\u00f3rio para o projeto e, dentro dele, execute o comando {npm init -y}. Isso criar\u00e1 um arquivo <em>package.json<\/em> padr\u00e3o;<\/li>\n\n\n\n<li><strong>Instale o Express.js:<\/strong> execute o comando {npm install express}. O NPM ir\u00e1 baixar o framework e adicion\u00e1-lo como uma depend\u00eancia no seu <em>package.json<\/em>;<\/li>\n\n\n\n<li><strong>Crie o arquivo do servidor:<\/strong> crie um arquivo chamado <em>server.js<\/em> (ou <em>index.js<\/em>) e adicione o seguinte c\u00f3digo:<\/li>\n<\/ul>\n\n\n\n<p>\/\/ Importa o framework Express<\/p>\n\n\n\n<p>const express = require(&#8216;express&#8217;);<\/p>\n\n\n\n<p>\/\/ Inicializa a aplica\u00e7\u00e3o Express<\/p>\n\n\n\n<p>const app = express();<\/p>\n\n\n\n<p>\/\/ Define a porta em que o servidor ir\u00e1 rodar<\/p>\n\n\n\n<p>const PORT = 3000;<\/p>\n\n\n\n<p>\/\/ Cria uma rota GET para o caminho raiz (&#8216;\/&#8217;)<\/p>\n\n\n\n<p>app.get(&#8216;\/&#8217;, (req, res) =&gt; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;res.send(&#8216;Servidor Node.js com Express est\u00e1 no ar!&#8217;);<\/p>\n\n\n\n<p>});<\/p>\n\n\n\n<p>\/\/ Inicia o servidor e o faz &#8220;escutar&#8221; por requisi\u00e7\u00f5es na porta definida<\/p>\n\n\n\n<p>app.listen(PORT, () =&gt; {<\/p>\n\n\n\n<p>&nbsp;&nbsp;console.log(`Servidor rodando em http:\/\/localhost:${PORT}`);<\/p>\n\n\n\n<p>});<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Execute o servidor<\/strong>: no terminal, execute o comando node server.js. Voc\u00ea ver\u00e1 a mensagem de confirma\u00e7\u00e3o no console;<\/li>\n\n\n\n<li><strong>Acesse no navegador:<\/strong> abra seu navegador e acesse o endere\u00e7o http:\/\/localhost:3000. Voc\u00ea ver\u00e1 a mensagem &#8220;Servidor Node.js com Express est\u00e1 no ar!&#8221;. Voc\u00ea acabou de criar e executar seu primeiro servidor Node.js.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Estrutura de arquivos recomendada para projetos Node.js<\/strong><\/h3>\n\n\n\n<p>Para garantir que o projeto seja realmente escal\u00e1vel, a organiza\u00e7\u00e3o precisa ser parte do processo e, por isso, voc\u00ea pode seguir uma estrutura mais ou menos assim:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\/node_modules:<\/strong> diret\u00f3rio gerenciado pelo <strong>NPM <\/strong>que cont\u00e9m todas as depend\u00eancias do projeto. Esse diret\u00f3rio n\u00e3o deve ser inclu\u00eddo no controle de vers\u00e3o (deve estar no .gitignore);<\/li>\n\n\n\n<li><strong>\/src (ou \/app):<\/strong> cont\u00e9m todo o c\u00f3digo-fonte da sua aplica\u00e7\u00e3o, separado por responsabilidades para manter a organiza\u00e7\u00e3o;<\/li>\n\n\n\n<li><strong>\/controllers:<\/strong> onde reside a l\u00f3gica de neg\u00f3cio principal. As fun\u00e7\u00f5es aqui s\u00e3o chamadas pelas rotas e orquestram as a\u00e7\u00f5es necess\u00e1rias para responder a uma requisi\u00e7\u00e3o;<\/li>\n\n\n\n<li><strong>\/routes: <\/strong>define os endpoints da sua <strong>API <\/strong>ou as rotas do seu site. Cada arquivo aqui mapeia uma <strong>URL <\/strong>e um<strong> m\u00e9todo HTTP<\/strong> (GET, POST, etc.) a uma fun\u00e7\u00e3o do controller correspondente;<\/li>\n\n\n\n<li><strong>\/models (ou \/services):<\/strong> camada respons\u00e1vel pela intera\u00e7\u00e3o com o banco de dados ou com outras APIs externas;<\/li>\n\n\n\n<li><strong>\/middleware: <\/strong>cont\u00e9m fun\u00e7\u00f5es que processam a requisi\u00e7\u00e3o antes que ela chegue \u00e0 sua rota final. S\u00e3o usadas para tarefas como autentica\u00e7\u00e3o, logging ou valida\u00e7\u00e3o de dados;<\/li>\n\n\n\n<li><strong>\/public:<\/strong> para armazenar arquivos est\u00e1ticos que ser\u00e3o servidos diretamente ao cliente, como folhas de estilo (<a href=\"https:\/\/king.host\/blog\/tecnologia\/css-modules-usando-css-de-maneira-eficaz-em-escala\/\"><strong>CSS<\/strong><\/a>), imagens e scripts de front-end;<\/li>\n\n\n\n<li><strong>\/config:<\/strong> armazena arquivos de configura\u00e7\u00e3o, como credenciais de banco de dados ou chaves de <strong>API <\/strong>para diferentes ambientes (desenvolvimento, produ\u00e7\u00e3o);<\/li>\n\n\n\n<li><strong>.env:<\/strong> arquivo para armazenar vari\u00e1veis de ambiente sens\u00edveis (como senhas e chaves de <strong>API<\/strong>), <strong>que n\u00e3o devem ser versionadas no Git;<\/strong><\/li>\n\n\n\n<li><strong>server.js (ou index.js):<\/strong> o ponto de entrada da aplica\u00e7\u00e3o, respons\u00e1vel por inicializar o servidor e carregar as rotas e configura\u00e7\u00f5es;<\/li>\n\n\n\n<li><strong>package.json e package-lock.json:<\/strong> os arquivos manifesto do projeto, que definem suas propriedades e depend\u00eancias.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Benef\u00edcios do Node.js em desenvolvimento web<\/strong><\/h3>\n\n\n\n<p>Ainda n\u00e3o se convenceu sobre essa alternativa? Sem problemas, mas separamos alguns dos diferenciais para voc\u00ea levar em considera\u00e7\u00e3o.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Alta performance para opera\u00e7\u00f5es de E\/S (I\/O)<\/h4>\n\n\n\n<p>Conforme explicado, o modelo de I\/O n\u00e3o bloqueante faz com que o Node.js se destaque em aplica\u00e7\u00f5es que dependem de muitas opera\u00e7\u00f5es de entrada e sa\u00edda.<\/p>\n\n\n\n<p>Aqui estamos falando de APIs que consultam bancos de dados, aplica\u00e7\u00f5es de chat em tempo real que mant\u00eam conex\u00f5es abertas, e servi\u00e7os de streaming de dados.<\/p>\n\n\n\n<p>Para essas cargas de trabalho, o Node.js pode lidar com um n\u00famero muito maior de usu\u00e1rios simult\u00e2neos com menos recursos de hardware em compara\u00e7\u00e3o com plataformas de I\/O bloqueante.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">O ecossistema NPM e a produtividade no desenvolvimento<\/h4>\n\n\n\n<p>O <strong>NPM<\/strong> \u00e9, sem d\u00favida, um acelerador de desenvolvimento, j\u00e1 que re\u00fane milhares de bibliotecas criadas e compartilhadas pela comunidade.&nbsp;<\/p>\n\n\n\n<p>No entanto, \u00e9 importante observar que no ecossistema Node.js muitas vezes ocorre justamente o contr\u00e1rio do ditado \u201cn\u00e3o reinventar a roda\u201d: existem diversos pacotes diferentes para resolver os mesmos problemas, alguns apenas renomeados ou lan\u00e7ados como v2, v3, v4. H\u00e1 at\u00e9 casos de bibliotecas que replicam funcionalidades j\u00e1 existentes no pr\u00f3prio JavaScript.<\/p>\n\n\n\n<p>Ou seja, o NPM oferece uma infinidade de op\u00e7\u00f5es, mas cabe ao desenvolvedor avaliar bem o que faz sentido adotar, priorizando pacotes consolidados e evitando depend\u00eancias desnecess\u00e1rias.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Unifica\u00e7\u00e3o da stack tecnol\u00f3gica com JavaScript<\/h4>\n\n\n\n<p>A possibilidade de utilizar <a href=\"https:\/\/king.host\/blog\/tecnologia\/bibliotecas-javascript\/\">JavaScript<\/a> tanto no front-end quanto no back-end oferece uma vantagem operacional para o seu neg\u00f3cio.<\/p>\n\n\n\n<p>Afinal, isso permite a forma\u00e7\u00e3o de equipes &#8220;full-stack&#8221; totalmente integradas, onde os desenvolvedores podem transitar entre as duas camadas da aplica\u00e7\u00e3o com mais facilidade.<\/p>\n\n\n\n<p>A unifica\u00e7\u00e3o da linguagem simplifica o compartilhamento de c\u00f3digo, a padroniza\u00e7\u00e3o de ferramentas e a gest\u00e3o do conhecimento dentro da equipe.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Do localhost para a hospedagem: como levar seu projeto adiante<\/strong><\/h3>\n\n\n\n<p>Levar sua aplica\u00e7\u00e3o Node.js do ambiente de desenvolvimento local para um servidor de produ\u00e7\u00e3o (como um <a href=\"https:\/\/king.host\/blog\/servicos-de-hospedagem\/hospedagem-compartilhada-ou-vps\/\"><strong>VPS<\/strong><strong> <\/strong><\/a>ou um ambiente de Cloud) envolve alguns passos cruciais.<\/p>\n\n\n\n<p>Primeiramente, o c\u00f3digo \u00e9 transferido para o servidor, geralmente atrav\u00e9s de um {git pull} a partir do seu reposit\u00f3rio.<\/p>\n\n\n\n<p>Em seguida, as depend\u00eancias de produ\u00e7\u00e3o s\u00e3o instaladas com o comando {npm install &#8211;production}. O passo mais importante, no entanto, \u00e9 garantir que sua aplica\u00e7\u00e3o continue rodando de forma persistente.<\/p>\n\n\n\n<p>Diferente do <strong>PHP <\/strong>sob o<a href=\"https:\/\/king.host\/blog\/servicos-essenciais\/modulo-seguranca-apache-mod-security\/\"> Apache<\/a>, um script Node.js executado diretamente pelo terminal (por exemplo, com {node server.js}) ser\u00e1 interrompido assim que o terminal for fechado.&nbsp;<\/p>\n\n\n\n<p>Por isso, em <strong>ambientes de produ\u00e7\u00e3o<\/strong>, n\u00e3o \u00e9 indicado rodar o servidor apenas com o comando do Express. A pr\u00e1tica recomendada \u00e9 utilizar um gerenciador de processos, como o <strong>PM2<\/strong>, que mant\u00e9m a aplica\u00e7\u00e3o ativa, gerencia logs e facilita reinicializa\u00e7\u00f5es autom\u00e1ticas.<\/p>\n\n\n\n<p>Na pr\u00e1tica, ele mant\u00e9m a sua aplica\u00e7\u00e3o Node.js ativa em segundo plano, monitora seu estado e reinicia automaticamente em caso de falha.<\/p>\n\n\n\n<p>Desde a cria\u00e7\u00e3o de APIs \u00e1geis at\u00e9 a constru\u00e7\u00e3o de sistemas em tempo real, o Node.js fornece as ferramentas necess\u00e1rias para que desenvolvedores e empresas construam produtos digitais escal\u00e1veis.<\/p>\n\n\n\n<p>No entanto, \u00e9 importante destacar que n\u00e3o basta pegar um servidor simples criado em localhost e coloc\u00e1-lo em produ\u00e7\u00e3o apenas com o PM2. Um ambiente produtivo exige cuidados adicionais de seguran\u00e7a.&nbsp;<\/p>\n\n\n\n<p>Por exemplo, ao usar o Express, uma boa pr\u00e1tica \u00e9 incluir o {helmet.js}, uma biblioteca que ajuda a proteger o servidor configurando de forma adequada os cabe\u00e7alhos HTTP e reduzindo vulnerabilidades comuns. Esse tipo de medida garante uma base m\u00ednima de blindagem antes de expor a aplica\u00e7\u00e3o para o p\u00fablico.<\/p>\n\n\n\n<p>Acredita que esse \u00e9 o caso para o seu neg\u00f3cio? Ent\u00e3o <a href=\"https:\/\/king.host\/\">conhe\u00e7a os planos da KingHost!<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Diferente dos servidores tradicionais, por padr\u00e3o, o Node.js usa uma \u00fanica thread com event loop para lidar com m\u00faltiplas requisi\u00e7\u00f5es. Compreender essa arquitetura \u00e9 essencial para quem busca aprender como criar servidor em localhost Node.js, garantindo efici\u00eancia e escalabilidade mesmo em aplica\u00e7\u00f5es simples.<\/p>\n","protected":false},"author":1,"featured_media":38734,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1324],"tags":[],"class_list":["post-38631","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-servicos-de-hospedagem"],"_links":{"self":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/38631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/comments?post=38631"}],"version-history":[{"count":2,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/38631\/revisions"}],"predecessor-version":[{"id":42027,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/posts\/38631\/revisions\/42027"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media\/38734"}],"wp:attachment":[{"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/media?parent=38631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/categories?post=38631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/king.host\/blog\/wp-json\/wp\/v2\/tags?post=38631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}