Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 63 additions & 19 deletions api/server.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,75 @@
// See https://github.com/typicode/json-server#module
const jsonServer = require('json-server')
const jsonServer = require('json-server');
const jsonServerAuth = require('json-server-auth');
const fs = require('fs');
const path = require('path');
const bcrypt = require('bcrypt');

const server = jsonServer.create()
const server = jsonServer.create();
const router = jsonServer.router('db.json');
const middlewares = jsonServer.defaults();

// Uncomment to allow write operations
// const fs = require('fs')
// const path = require('path')
// const filePath = path.join('db.json')
// const data = fs.readFileSync(filePath, "utf-8");
// const db = JSON.parse(data);
// const router = jsonServer.router(db)
// Middleware para asegurarse de que la colección "users" exista
server.use((req, res, next) => {
if (!router.db.get('users').value()) {
router.db.set('users', []).write();
}
next();
});

// Comment out to allow write operations
const router = jsonServer.router('db.json')
// Inicializar la base de datos para json-server-auth
server.db = router.db; // Necesario para json-server-auth

const middlewares = jsonServer.defaults()
// Cargar reglas de permisos desde routes.json
const rules = jsonServerAuth.rewriter(JSON.parse(fs.readFileSync(path.join(__dirname, '../routes.json'))));

server.use(middlewares)
// Add this before server.use(router)
server.use(middlewares);
server.use(rules); // Aplicar las reglas de permisos antes del router
server.use(jsonServer.rewriter({
'/api/*': '/$1',
'/blog/:resource/:id/show': '/:resource/:id'
}))
server.use(router)
}));

server.use(jsonServerAuth);

// Middleware para calcular y devolver el número total de páginas en las solicitudes de productos
server.use((req, res, next) => {
if (req.method === 'GET' && req.path === '/products') {
const totalItems = server.db.get('products').size().value();
const limit = parseInt(req.query._limit, 10) || totalItems;
const totalPages = Math.ceil(totalItems / limit);

res.setHeader('X-Total-Pages', totalPages); // Agregar encabezado con el total de páginas
}
next();
});

server.use(router);

server.post('/register', (req, res) => {
const { email, password, name } = req.body;

if (!email || !password) {
return res.status(400).json({ error: 'Email and password are required' });
}

const users = server.db.get('users').value();
const userExists = users.some(user => user.email === email);

if (userExists) {
return res.status(400).json({ error: 'User already exists' });
}

const hashedPassword = bcrypt.hashSync(password, 5);
const newUser = { id: Date.now(), email, password: hashedPassword, name: name || '' };

server.db.get('users').push(newUser).write();
res.status(201).json(newUser);
});

server.listen(3000, () => {
console.log('JSON Server is running')
})
console.log('JSON Server is running');
});

// Export the Server API
module.exports = server
module.exports = server;
Loading