¿Qué es NodeJS?
Node JS es un entorno JavaScript del lado del servidor orientado a eventos y nos sirve para varias plataformas (Windows, Linux, macOS). Basado en la máquina V8 de Google para Chrome, utiliza un único hilo de ejecución de manera asíncrona, donde toda operación que realice entradas y salidas debe tener una función callback. Dicho hilo de ejecución única también se le denomina EventLoop y almacena en una cola los callbacks que debe ejecutar una vez que las operaciones asíncronas finalicen. A lo largo de las diferentes versiones se empezaron a usar librerías como Async, para después pasar a las promesas, los yield y desde la versión 8 el uso de Async/Await.
El objetivo principal de NodeJS es consumir el mínimo posible de recursos de la máquina y mejorar el rendimiento.
Instalación y creación del proyecto
Para su instalación accedemos a nodejs y descargar la versión LTS que es la recomendada.
Realizamos los pasos del asistente de instalación.

Abrimos terminal y ejecutamos node –v para comprobar que efectivamente se ha instalado correctamente y también npm install –g npm para instalar o actualizar el gestor de paquetes npm.
Comprobamos las versiones para asegurarnos que está todo correcto.

También hará falta instalar MongoDB que puedes ver los pasos del tutorial anterior.
Luego desde cualquier directorio creamos el proyecto ejecutando npm init y nos preguntará por el nombre del proyecto, la versión, descripción, entry point, en index.js, test command no indicamos, git repository, keywords, autor, licencia y aceptamos.

Instalación de dependencias
Instalamos las siguientes dependencias.
express: librería para el protocolo HTTP permitiéndonos desarrollar nuestra API Rest.
npm install express –save
ver más sobre express
mongoose: librería para trabajar con la base de datos MongoDB
npm install mongoose –save
ver más sobre mongoose

Instalamos con –-save para indicar que se guarde en la lista de dependencias
No es necesario instalar todas las dependencias desde el inicio. De hecho podemos ir instalando dependencias en cualquier momento, siempre que nos demos cuenta que nos es necesaria instalarla.
Por ejemplo podemos instalar ahora mismo la librería nodemon que nos sirve para recargar el servidor cada vez que hagamos algún cambio en nuestra aplicación node. De no habernos dado cuenta, se podría instalar más tarde.
npm install nodemon –save-dev
ver más sobre nodemon
Y con –save-dev se indica que es para las listas de dependencias en desarrollo, pero no es necesario en producción.

Si abrimos con cualquier editor (Visual Studio Code por ejemplo) el directorio del proyecto, vemos que tenemos el package.json donde muestra las dependencias instaladas.

Si quisiéramos desinstalar alguna de las dependencias es simplemente con npm uninstall nombre_de_la_librería.
Por ejemplo: npm unistall nodemon
Conectando con MongoDB
Ahora ejecutamos mongod y mongo y damos uso a dbTutorial explicado en el tutorial anterior.

La colección que tiene dbTutorial es user.

Y para ver los datos que tiene usamos find()

Creamos ahora el fichero index.js que será el primer fichero que ejecuta la aplicación. Por tanto se implementa la conexión a la base de datos de MongoDB en este fichero.
Mediante el siguiente código indicando la url de la base de datos, usando por defecto el puerto 27017 en localhost
'use strict' // modo estricto para evitar sintaxis incorrec
var mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/dbTutorial', { useNewUrlParser: true }, (err, db) => {
if (err) throw err
console.log("conexión establecida a la base de datos " + db.name)
db.close()
})

Para ser ejecutado se utiliza nodemon y se le puede indicar el comando nodemon index.js en el script del package.js para lanzarlo de forma automática.

Y comprobamos que efectivamente se establece la conexión.

Para una última comprobación, desde el terminal accediendo a la base de datos dbTutorial y después a la colección user, si ejecutamos lo siguiente podemos ver los datos que tenemos.

Lo mismo podemos hacer con NodeJS utilizando mongoose para conectar como hemos visto antes y haciendo la consulta con find() de forma parecida.
'use strict' // modo estricto para evitar sintaxis incorrec
var mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/dbTutorial', { useNewUrlParser: true }, (err, db) => {
if (err) throw err
console.log("conexión establecida a la base de datos " + db.name)
db.collection("user").findOne({}, (err, result) => {
if (err) throw err
console.log(result)
})
db.close()
})


Otra forma sin utilizar mongoose obteniendo el mismo resultado.
'use strict' // modo estricto para evitar sintaxis incorrec
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("dbTutorial");
dbo.collection("user").findOne({}, function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});


Entendiendo todos estos pasos ya simplemente es ir practicando con los otros métodos: insertOne(), find(query), deleteOne(), updateOne() y más métodos para entre otras cosas poder realizar una API REST.
Manual de referencia por si tienes más interés:
docs.mongodb










































































































