Tengo un problema para que mi backend funcione... sinceramente, ni siquiera se está cargando, obtengo el registro de que el servidor se ha iniciado pero al ingresar en http://localhost:5000/api/items se carga indefinidamente. No estoy seguro de lo que estoy haciendo mal.
Este es mi servidor.js
const express = require('express'); const bodyParser = require('body-parser'); const routes = require('./items-routes'); const server = express(); server.use(bodyParser.json); server.use('/api/items', routes); const port = 5000; try { server.listen(port); console.log(`Listening on port ${port}`); } catch (error) { console.log(error.message); }Aquí está mi items-routes.js
const express = require('express'); const itemsController = require('./items-controller'); const router = express.Router(); router.get('/', itemsController.getItems); router.post('/:iid', itemsController.createItem); module.exports = router;Y finalmente mi items-controller.js
const Item = require('./items-schema'); const items = [ { title: 'This is a title', description: 'This is a description', }, { title: 'This is another title', description: 'This is another description', }, { title: 'This is a third title', description: 'This is a third description', }, ]; const getItems = async (req, res, next) => { res.json({ items: items.map((item) => { item.toObject({ getters: true }); }), }); console.log('These are the ITEMS!'); }; const createItem = async (req, res, next) => { const { title, description } = req.body; const createdItem = new Item({ title, description, }); try { items.push(createItem); console.log('You are posting an ITEM!'); } catch (error) { return next(error); } res.status(201).json({ item: createdItem }); }; exports.getItems = getItems; exports.createItem = createItem;Inicialmente tenía una configuración de mongoose para crear un backend adecuado, pero ahora tengo elementos ficticios para resolver este problema antes de continuar. El servidor nunca funcionó, pero tengo un proyecto similar que funcionó.
Tengo la sospecha de que no estoy entendiendo router.use/get/post correctamente, pero he intentado leer la documentación y solo me confundo más.
En realidad, todo su código está 100% bien, acaba de aplicar la función de middleware bodyParser.json incorrectamente. La función bodyParser.json no es una función de middleware en sí misma, es una función que toma un objeto de opciones, luego, cuando se llama, devuelve una función de middleware.
Entonces, para arreglar su código, solo necesita agregar () para llamar a la función:
const express = require('express'); const bodyParser = require('body-parser'); const routes = require('./items-routes'); const server = express(); server.use(bodyParser.json()); // <- Call the bodyParser.json() function server.use('/api/items', routes); const port = 5000; try { server.listen(port); console.log(`Listening on port ${port}`); } catch (error) { console.log(error.message); } La razón por la que se colgó para siempre es porque Express estaba esperando que la función bodyParser.json llamara a next() antes de seguir adelante; sin embargo, nunca hace eso, por lo que simplemente se cuelga.
Nota al margen:
Por cierto, ya no necesita el módulo body-parser si está utilizando la última versión de Express. Su código se puede cambiar a esto:
server.use(express.json());Y funcionará igual sin la dependencia adicional.