Validación de datos que llegan al API REST en NodeJS

En express.js podemos utilizar validator.js

Instalar con: $ npm install –save express-validator

Por ejemplo tenemos este codigo para crear nuevo usuario:

const express = require('express');
const app = express();

app.use(express.json());
app.post('/user', (req, res) => {
  User.create({
    username: req.body.username,
    password: req.body.password
  }).then(user => res.json(user));
});

Antes de crear usuario nuevo con el POST podemos verificar los datos:

// ...rest of the initial code omitted for simplicity.
const { check, validationResult } = require('express-validator/check');

app.post('/user', [
  // username must be an email
  check('username').isEmail(),
  // password must be at least 5 chars long
  check('password').isLength({ min: 5 })
], (req, res) => {
  // Finds the validation errors in this request and wraps them in an object with handy functions
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

  User.create({
    username: req.body.username,
    password: req.body.password
  }).then(user => res.json(user));
});

Ahora si hay problemas en validación, tendremos de respuesta:

{
  "errors": [{
    "location": "body",
    "msg": "Invalid value",
    "param": "username"
  }]
}

Mas información en https://express-validator.github.io/docs/

NodeJS: primer servidor REST

Mi primer servidor REST por si es util a alguien

Instalación:
$ npm init
$ npm install
$ npm install express –save // Framework ExpressJS
$ npm install nodemon // Herramienta para ejecutar proyecto y aplicar cambios cada vez que se graba sin reiniciar la aplicación.
$ npm install express-generator –save // Generador de proyectos ExpressJS
$ express Proyecto1 // Generamos proyecto tipo express “Proyecto1”
$ cd Proyecto1
$ npm install
$ npm install chance –save
$ npm i morgan –save // log de peticiones GET / POST
$ npm i winston // gestion de errores

Instalación para base de datos:
1. MongoDB instalar desde pagina web oficial.
2. En proyecto instalar Mongoose.js: $ npm i mongoose
3. Añadir modulo “nconf” para guardar ruta a BD y puerto: npm i nconf

Detalles de instalación:
Para que “npm” apunta libreria en “package.json” usar: “npm install chance –save” (change es el nombre de libreria, con –save indicamos que apunta libreria en fichero “package.json”).


Despues:
– Para ejecutar aplicación: $ npm start
– Para ejecutar pero que tenga en cuenta si cambiamos algo sin reejecutar: $ nodemon app.js
– Para ejecutar en modo producción: $ NODE_ENV=production npm start
– Para ejecutar base de datos (desde su PATH): mongod. mongo


Para utilizar control de acceso podemos usar OAuth 2.0, Passport.js:
1. Faker
2. oauth2orize
3. passport
4. passport-http
5. passport-http-bearer
6. passport-oauth2-client-password