Estoy tratando de escribir un middleware Express que tenga acceso al cuerpo de la solicitud sin formato. Así que algo como esto (realmente funciona y) sería ideal:
const middleware = [ express.raw({ type: '*/*' }), (req, res, next) => { digest(req.body); next(); }, ]; Sin embargo, este enfoque significa que el req.body ahora ha sido transmitido/procesado y ahora no está disponible para ningún controlador o middleware que siga a mi middleware:
app.post(route, middleware, (req, res) => res.send(req.body)); // returns `{}`Me gustaría que fuera posible usar mi middleware con otros analizadores de cuerpo. Así que esto debería estar bien:
app.use(express.json()); app.post(route, middleware, (req, res) => res.send(req.body)); // should return the JSON body posted not `{}`Tan bien como esto:
app.post(route, middleware, express.json(), (req, res) => res.send(req.body)); // should return the JSON body posted not `{}`Es posible que:
express.raw({ type: '*/*' }) ?He ampliado estos fragmentos en una prueba fallida en este repositorio si lo anterior no es lo suficientemente claro y agradecería cualquier ayuda o sugerencia.
Entonces, con un poco más de investigación (y sueño) , creo que mi enfoque aquí es probablemente incorrecto.
Una solución más apropiada sería usar la opción de verify del analizador de cuerpo relevante que le da acceso al búfer:
app.use(express.json({ verify: (req, res, buf, encoding) => digest(buf) || throw 'Invalid Digest' })); app.post(route, (req, res) => res.send(req.body));