Estoy trabajando con express + json body parser. Para propósitos de validación necesito distinguir entre
{} )ya que estoy tratando de proporcionar mensajes de error razonables, y en un caso necesito indicarle al usuario que agregue los campos que faltan, mientras que en el otro caso es posible que ni siquiera sepan que el cuerpo de la solicitud debe enviarse, y la prioridad es una advertencia ellos sobre esto.
Esto me parece imposible actualmente, ya que el analizador de cuerpo json establece request.body en {} en caso de que no se haya proporcionado ningún cuerpo de solicitud, referencia:
https://github.com/expressjs/body-parser/blob/master/lib/types/json.js#L72
Mi pregunta es, al usar el analizador de cuerpo json, ¿es posible detectar si el cuerpo de la solicitud realmente fue enviado por el cliente o no? Entonces, ¿cómo implementaría una función como esta?
import { Request } from 'express' function didTheUserSendRequestBody(request: Request): boolean { // What do? } Lo que devuelve true cuando mi punto final es golpeado así:
curl -X POST http://localhost:5000/foo -H "Content-Type: application/json" -d '{}' Y false por esto:
curl -X POST http://localhost:5000/fooBody-parser json tiene la opción de verificación . Puede verificar los datos sin procesar aquí.
app.use(express.json({ verify: (req, res, buf, encoding) => { // check buff is empty ? and attach result to req ? } }))con verificar es función con 4 argumentos: " donde buf es un búfer del cuerpo de solicitud sin procesar "
tal vez solo pueda verificar el tipo de contenido enviado, si el usuario no lo adjunta, el valor predeterminado será "indefinido".
function didTheUserSendRequestBody(request: Request): boolean { if (!request.get('Content-Type')) { // return any message } }La forma más fácil que conozco es comprobando si req.body es veraz
function didTheUserSendRequestBody(request: Request): boolean { if(req.body){ // Do stuff } }Según https://developer.mozilla.org/en-US/docs/Glossary/Truthy MDN, un objeto vacío '{}' es verdadero. Si no se envía ningún cuerpo, debería estar indefinido cuando intente acceder a req.body, que es falso.
Consulte https://expressjs.com/en/api.html#req para obtener más detalles