JS has no capability of controlling network or file system (this language doesn't do that, for that you need c or c++)
node gives you access to many modules
const http = require("http")
http "babel" holds the reference of capability of networking
libuv is a library (majorly in C)
a interface between computer and nodejs (computer knows where the network is coming, libuv pass these to nodejs)
net module: streams of data, bytes.
http module: pass steams to string
build information (head, browser, ip) into 2 boxes:
request: instance of incoming messages, majorly consists of properties
response: a writableStream until you hit the end. streams the response back, and give it to libuv. majorly methods, for example .end (end of stream)
event emitter: execute your code on some event that happens.
we define functions in JS but never run it. (JS is single threaded, if you put () at the end of a function, it will execute)
It gets execute when a request comes in. Libuv finds the properties (for example, a route when someone requesting a URL) and emits an event, then it is the job of nodejs to look into the code file (kept in memory) and looks for equivalent function, and based on that it executes the function. nodejs takes these objects (req, res) and give you access to each one of them, by injecting your requests and response to the function parameters.
JS is defining what should happen (could be other languages), the hard part is done by nodejs and libuv.
Node: a cross-platform JS runtime environment for executing JavaScript code
JS code can't be understood by computer
a JS engine is a program that converts JS code into machine code that allows a computer to perform specific tasks
in simple terms, a JS engine can execute JS code
让JS从浏览器中分离出来,得以在服务器中运行
v8 engine & nodejs:
v8 engine sits at the core of nodejs
written in c++
v8 can run standalone, or can be embedded in any c++ program (helped with the creation of nodejs)
runtime: an environment which provides all the necessary components in order to use and run a JS program
JS code is executed in JS runtime:
JS engine executes JS code: a call stack (where JS code gets executed), a heap memory to store all the variables that a js application needs.
just a JS engine is not sufficient in the grand scheme of things, the engine itself can execute ecmascript but JS is ecmascript plus all those web apis (console.log, dom api). So to run js a browser needs not just a JS engine but a JS runtime.
browser api: provided by the browser
dom, timers(setTimeout, setInterval), promises, storage etc. which add extra functionality to the JS engine but are not part of JS language itself.
queues: are where async tasks wait before they can be executed
event loop: ensures async tasks are executed in the right order
Nodejs: a JS runtime environment which provides all the necessary components in order to use and run a JS program outside the browser
open source code written in JS and c++
nodejs runtime, unlike browser runtime, does not have access to the web apis (there is no window or document when working with nodejs)
deps folder: this folder contains external code that node.js requires for its functioning. we can treat it as one component in the nodejs runtime with sub components like v8, uv, ect.
let me highlight two important dependencies:
1.v8: the same js engine present in the browser, without v8, there is no way for nodejs to understand js code.
2.uv: an open-source library called libuv, providing nodejs access to the underlying operating system features such as file system and networking.
src folder: contains the c++ source code of the nodejs runtime. JS as a language was not designed to deal with low level functionalities like file system or networking, c++ on the other hand was designed to do that, so this source folder is a set of c++ features that nodejs brings to the table. Features such as file system handling and networking. nodejs adds new features to JS through c++ code.
lib folder: libray of js code. How does js developer get access to these c++ features? the lib folder contains js code that's been written for you to easily get access to the c++ features. For example, fs.js contains js code that we can write to access the file system, the code internally calls the corresponding c++ features which further relies on libuv to access the operating system. The lib folder also contains a few utility functions that you may need when writing code with nodejs
1.node REPL
reads JS code the user enters, evaluates the result of interpreting the line of code, prints the result to user, and loops util the user signals to quit
$ node
//this starts an interactive shell that processes nodejs expressions
2. write js code in a file and run it with the code command in the terminal
execute the js code written in a file with node:
$ node index.js