API users

Como ya tenemos el modelo User, vamos a crear el endpoint /users para poder consultar, crear, eliminar y actualizar un usuario.

Controlador

En la carpeta api/user creamos el archivo user.controller.js que va a tener todos los métodos que necesitemos, en este punto solo vamos a usar el de crear usuario.

api/user/user.controller.js
const jwt = require('jsonwebtoken');

const User = require('./user.model');
const config = require('../../config/environment');

function validationError(res, statusCode) {
  const statusCodeLocal = statusCode || 422;
  return err => res.status(statusCodeLocal).json(err);
}

function handleError(res, statusCode) {
  const statusCodeLocal = statusCode || 500;
  return err => res.status(statusCodeLocal).send(err);
}

/**
 * Get list of users
 * restriction: 'admin'
 */
function index(req, res) {
  return User.find({}, '-salt -password').exec()
    .then(users => res.status(200).json(users))
    .catch(handleError(res));
}

/**
 * Creates a new user
 */
function create(req, res) {
  const newUser = new User(req.body);
  newUser.provider = 'local';
  newUser.role = 'user';

  return newUser.save()
    .then((user) => {
      const token = jwt.sign(
        { _id: user._id },
        config.secrets.session,
        { expiresIn: 60 * 60 * 5 },
      );
      res.json({ token });
    })
    .catch(validationError(res));
}

module.exports = {
  index,
  create,
};

Ahora necesitamos una ruta para consumir estos métodos, vamos a crearlos.

Rutas

En la misma carpeta crearemos el archivo index.js con el siguiente código:

api/user/index.js
/**
 * User
 * @author: Cristian Moreno Zuluaga <khriztianmoreno@gmail.com>
 */

const { Router } = require('express');
const controller = require('./user.controller');

const router = new Router();

router.post('/', controller.create);

module.exports = router;

La idea es llegar a tener en este archivo todas estas rutas:

Solo nos falta registrar nuestro endpoint en el archivo de rutas rotues.js

routes.js
/**
 * Main application routes
 * @author: Cristian Moreno Zuluaga <khriztianmoreno@gmail.com>
 */

// Import Endpoints
const helloWorld = require('./api/helloworld');
const product = require('./api/product');
// New line
const user = require('./api/user');

module.exports = (app) => {
  app.use('/api/helloworld', helloWorld);
  app.use('/api/products', product);
  // New line
  app.use('/api/users', user);
};

Podemos crear un usuario accediendo por postman a la siguiente url: /api/users

Last updated