Tengo 2 declaraciones if como middleware en mi aplicación express. El primero no hay problema, pero antes del segundo realiza la función next() sin ejecutar la segunda instrucción if.
app.use((req: Request, res: Response, next: express.NextFunction) => { const email: string = req.body.email; const phoneNum: string = req.body.phone; console.log(phoneNum); if (phoneNum) { if (!phone(phoneNum).isValid) { res.json({ message: "invalid phone format. Expecting format like: 8001234567", }); } else { req.body.phone = phone(phoneNum).phoneNumber; } } if (email) { if (!EmailValidator.validate(email)) { res.json({ message: "invalid email format. Expecting format like: name@domain.com", }); } } next(); });ACTUALIZACIÓN: Probé declaraciones de devolución pero el cliente no recibe una respuesta. Código actualizado:
app.use((req: Request, res: Response, next: express.NextFunction) => { const email: string = req.body.email; const phoneNum: string = req.body.phone; console.log(phoneNum); if (phoneNum) { if (!phone(phoneNum).isValid) { res.json({ message: "invalid phone format. Expecting format like: 8001234567", }); } else { req.body.phone = phone(phoneNum).phoneNumber; return; } } else { return; } if (email) { if (!EmailValidator.validate(email)) { res.json({ message: "invalid email format. Expecting format like: name@domain.com", }); } else { return; } } else { return; } next(); });Es difícil decir completamente el contexto de este middleware, pero mi instinto es que desea return cada vez que envía una respuesta al cliente:
app.use((req: Request, res: Response, next: express.NextFunction) => { const email: string = req.body.email; const phoneNum: string = req.body.phone; console.log(phoneNum); if (phoneNum) { if (!phone(phoneNum).isValid) { res.json({ message: "invalid phone format. Expecting format like: 8001234567", }); return; } else { req.body.phone = phone(phoneNum).phoneNumber; } } if (email) { if (!EmailValidator.validate(email)) { res.json({ message: "invalid email format. Expecting format like: name@domain.com", }); return; } } next(); });