Recibo el siguiente error cuando intento pasar varios middlewares en mi ruta de edición.
el error es:
Route.put() requiere una función de devolución de llamada pero obtuvo un [objeto Objeto]
Este es el código:
const auth = require('../middleware/auth') const admin = require('../middleware/admin') router.put('/inflow/item/:id', [auth, admin],async (req, res) => { const brand = await Brand.findOne({ brand: req.body.brand }) const existingItem = await Stocks.findById(req.params.id) const item = { 'productname' : req.body.productname, 'quantity' : existingItem.quantity + req.body.quantity, 'brand' : brand._id, } const logChanges = { 'quantityAdded' : req.body.quantity, 'author' : 'Peter' } console.log(logChanges) const update = { $set : item, $push : {logAddition : logChanges} } console.log(item) const stocks = Stocks.findByIdAndUpdate(req.params.id, update,{new: true}, (err, updateListing) => { if(err){ res.status(404).send({success: false, msg: err.message}) } console.log(updateListing) res.json(updateListing) }) })El error desaparece cuando elimino uno de los middlewares. Como esto:
router.put('/inflow/item/:id', [auth, admin],async (req, res) => { } A continuación se muestran los fragmentos de código para los middlewares de auth y admin :
Autorización
const jwt = require('jsonwebtoken') const config = require('config') module.exports = function (req, res, next){ const token = req.header('x-auth-token') if (!token) return res.status(401).send('Access Denied. No token provided') res.status(401) try { const decoded = jwt.verify(token, config.get('jwtPrivatekey')) req.user = decoded next() // we either terminate process or we pass control }catch(ex){ res.status(400).send('Invalid Token', ex.message) } }Administración
module.exports = function(req, res, next) { //401 Unauthorized - no json webtoken //403 Forbideen - you tried again but still cannot access if(!req.user.isAdmin) return res.status(403).send('Access denied') next() }O no ha compartido el código completo del controlador de ruta de edit . O olvidó exportar el objeto del enrutador en el archivo del controlador.
router.put('/inflow/item/:id', [auth, admin],async (req, res) => { } // I think you've missed this line module.exports = router;Obtenga más información sobre la definición y el uso de módulos de ruta separados .