i am using express routes. this is my request
import { Router, Request, Response, NextFunction } from "express";
import { celebrate, Joi, Segments } from "celebrate";
const route = Router();
export default (app: Router) => {
route.get("/:id",
celebrate({
[Segments.PARAMS]: Joi.object({
id: Joi.string().required().label("Store Id")
})
}),
basicAuth, //a middleware
asyncHandler(async (req: Request, res: Response, next: NextFunction) => {
// some operations.
return res.status(202).json(storeDetails);
})
);
}
here how can i use the basicAuth
middleware conditionally such that basicAuth
is used when id=="me" else another middleware isAuth
is used.
You can just call the middleware manually if your conditional is met:
route.get("/:id",
celebrate({
[Segments.PARAMS]: Joi.object({
id: Joi.string().required().label("Store Id")
})
}),
asyncHandler(async (req: Request, res: Response, next: NextFunction) => {
if (req.params.id === "me") {
// call basicAuth middleware manually
basicAuth(req, res, err => {
if (err) {
// send error response here
next(err);
} else {
// continue processing here now that basicAuth has been verified
}
});
} else {
// not "me"
// some operations.
return res.status(202).json(storeDetails);
}
})
);
}