Node.js e JavaScript

Gostaria de entender de uma vez por todas isso. O que eu entendi (posso estar errado por isso estou aqui): JavaScript é uma linguagem de programação mas so roda em navegadores. O Node.js é um jeito de rodar JavaScript fora dos navegadores. Então para rodar JavaScript no back-end (servidores né) você programa JavaScript normalmente, mas ele é executado no node.js em vez de ser executado em um navegador é isso?

JavaScript é só uma linguagem. O browser tem suas APIs e NodeJs as dele, então tudo depende de onde vai ser usado a linguagem.

acho que minha pergunta foi bem especifica, mas obrigado

JavaScript não roda “só no navegador”, dá pra rodar na JVM, ou “dentro do Python”, por exemplo. Mas enfim, talvez fique um pouco extenso, mas é importante você entender alguns conceitos:


Linguagem

Uma linguagem, no fundo, é apenas uma especificação: um documento (um texto) que descreve como ela é. No caso do JavaScript, a especificação é essa aqui.

Para uma linguagem poder ser usada (ou seja, para poder fazer “coisas reais” com ela), precisa de uma implementação. Alguém precisa pegar a especificação e implementar. É o que os browsers fazem - o Chrome, por exemplo, usa a engine V8, que é uma implementação da linguagem: um programa que implementa todas as regras descritas na especificação.

O Node.js é um runtime (a grosso modo, um “ambiente capaz de rodar JavaScript”), que por baixo dos panos, também usa o V8. Só que ele também adiciona algumas coisas (as várias “coisas prontas” que traz consigo, mas que não fazem parte da especificação da linguagem). Entre essas coisas, está a capacidade de criar um servidor HTTP.

Como já dito, existem outras implementações. O Rhino, por exemplo, é feito em Java, e além de rodar JavaScript, permite que se rode código Java misturado com JavaScript. É como se fosse um “Node”, só que em vez de adicionar novas API’s em JavaScript, ele adiciona a capacidade de usar as API’s do Java.

Enfim, JavaScript (e basicamente qualquer linguagem) pode em tese rodar em “qualquer lugar”, desde que alguém crie uma implementação que permita isso.


Cliente / Servidor

De maneira bem resumida, quando você acessa um site, ocorre o seguinte:

  1. o cliente (no caso, o browser) manda um request para servidor (o “site”)
  2. o servidor processa o request (“hmm, usuário X está pedindo a página Y”)
  3. o servidor retorna o HTML/CSS/JavaScript
  4. o cliente pega o retorno e renderiza a página

O JavaScript que é retornado no passo 3 rodará no browser, pois ele é feito para interagir com a página (acessar/modificar o HTML, etc).

Já no passo 2, pode ser usada qualquer linguagem: Java, C#, Python, PHP, e até mesmo JavaScript. Mas como no servidor ele não está rodando em um browser, deve-se usar uma engine que não dependa do browser, como por exemplo o Node.

Resumindo, é isso. JavaScript é uma linguagem que pode rodar tanto no browser quanto no servidor, o que muda é a implementação (a engine/runtime e as API’s) que é necessária em cada caso.