Para implementar un servidor RESTful de pruebas rápido con json-server, primero instalamos la dependencia del proyecto.
npm install json-server --save
Creamos el archivo principal del servidor, por ejemplo servidor.js:
const jsonServer = require('json-server');
const servidor = jsonServer.create();
servidor.listen(4000, () => {
console.log('Servidor activo en puerto 4000');
});
Ejecutamos el servidor con Node.js:
node servidor.js
Para estructurar los datos de prueba, generamos un archivo datos/muestras.js con la siguiente configuración:
module.exports = () => {
return {
muestra: 'ejemplo',
contenido: 'Datos de prueba para el servidor'
};
};
Implementamos un controlador en controladores/muestras.js:
const obtenerDatos = require('../datos/muestras');
module.exports = (req, res) => {
const informacion = obtenerDatos();
informacion.descripcion = 'Información detallada de las muestras';
res.json(informacion);
};
Definimos las rutas en rutas.js:
const controladorMuestras = require('./controladores/muestras');
module.exports = (aplicacion) => {
aplicacion.use('/api/muestras', controladorMuestras);
};
Actualizamos el archivo princiapl para integrar el enrutamiento:
const jsonServer = require('json-server');
const servidor = jsonServer.create();
const enrutador = require('./rutas');
enrutador(servidor);
servidor.listen(4000, () => {
console.log('Servidor activo en puerto 4000');
});
Para estandarizar las respuestas, agregamos un middleware en servidor.js:
const jsonServer = require('json-server');
const servidor = jsonServer.create();
servidor.use((req, res, siguiente) => {
const enviarJson = res.json.bind(res);
res.exitosa = (datos) => {
return enviarJson({
estado: 200,
mensaje: 'Operación exitosa',
datos
});
};
res.error = (mensaje, datos) => {
return enviarJson({
estado: -1,
mensaje,
datos
});
};
siguiente();
});
const enrutador = require('./rutas');
enrutador(servidor);
servidor.listen(4000, () => {
console.log('Servidor activo en puerto 4000');
});
json-server también permite manejar endpoints RESTful cmopletos. Creamos un archivo de base de datos simulada en bd.js:
module.exports = () => {
return {
usuarios: [
{
id: 1,
nombre: 'Juan Pérez',
edad: 25
},
{
id: 2,
nombre: 'María García',
edad: 32
}
]
};
};
Integramos la base de datos y el router nativo en servidor.js:
const jsonServer = require('json-server');
const servidor = jsonServer.create();
const enrutador = require('./rutas');
const datos = require('./bd');
servidor.use((req, res, siguiente) => {
const enviarJson = res.json.bind(res);
res.exitosa = (datos) => {
return enviarJson({
estado: 200,
mensaje: 'Operación exitosa',
datos
});
};
res.error = (mensaje, datos) => {
return enviarJson({
estado: -1,
mensaje,
datos
});
};
siguiente();
});
enrutador(servidor);
const routerREST = jsonServer.router(datos);
servidor.use('/api', routerREST);
servidor.listen(4000, () => {
console.log('Servidor activo en puerto 4000');
});