Quiero reutilizar un fragmento de código que me ahorrará MUCHO TIEMPO. Quiero que las solicitudes POST, DELETE, PATCH y GET sean modulares.
Tengo un archivo js que define la ruta básica para cada módulo (mod) y dado que estoy usando 23 módulos, que funcionarán de la misma manera, me gustaría tomar este atajo. Aquí está el "Archivo de ruta básica"
let route = ""; let mod = undefined; router.get("/" + route, verify, async (req, res) => { const id = req.query.id; let data; if (id) { data = await mod.findOne({_id: id}); } else { data = await mod.find({}); } if (data) return res.status(200).json({status: 404, message: "The data can't be found!", data: []}); else return res.status(200).json({status: 200, message: "Found data!", data: data}); }); router.post("/" + route, verify, async (req, res) => { let data = new mod(req.body); data = await data.save(); if (data) return res.status(200).json({status: 404, message: "The data can't be found!", data: []}); else return res.status(200).json({status: 200, message: "Found data!", data: data}); }); router.patch("/" + route, verify, async (req, res) => { const id = req.query.id; let data; if (id) { data = await mod.updateOne({_id: id}, {$set: req.body}); } if (!data) return res.status(200).json({status: 404, message: "The data can't be found!", data: []}); else return res.status(200).json({status: 200, message: "Found data and updated!", data: data}); }); router.delete("/" + route, verify, async (req, res) => { const id = req.query.id; let data; if (id) { data = await mod.deleteOne({_id: id}); } if (!data) return res.status(200).json({status: 404, message: "The data can't be found!", data: []}); else return res.status(200).json({status: 200, message: "Found data and deleted!", data: data}); }); module.exports = function(proute, pmodule){ route = proute; module = pmodule; return router; };Y en uno de los otros archivos del enrutador le digo a cada ruta qué módulo está usando y cómo se llama.
router.use(yukir("disc-server", DiscServer)); router.use(yukir("disc-user", User)); router.use(yukir("autochannel", AutoChannel));El caso es que no me sale ningún error sino un error 404 por lo que no se encuentra la ruta, lo cual es muy raro. ¿Puede alguien ayudarme con eso?
Su problema es que las cadenas en Javascript se pasan por valor, no se pasan por referencia, por lo que en el momento en que se realizan las llamadas a los métodos del enrutador, route y mod son la cadena vacía e indefinida respectivamente. El enrutador funciona, por lo tanto, siempre registra la ruta en "/" . Envuelva su código de definición de ruta dentro de la función de fábrica y estará bien.