Thursday, 4 November 2021

async.parallel / async.each for POST request with accessFilter, parser

I use express v4.17.1 and would like to make my routes run in parallel.

So I have found some examples in the internet.

Example 1:

function runInParallel() {
  async.parallel([
    getUserProfile,
    getRecentActivity,
    getSubscriptions,
    getNotifications
  ], function(err, results) {
    //This callback runs when all the functions complete
  });
}

Example 2:

app.use(getUser);
app.use(getSiteList);
app.use(getCurrentSite);
app.use(getSubscription);

can be changed by doing:

function parallel(middlewares) {
  return function(req, res, next) {
    async.each(middlewares, function(mw, cb) {
      mw(req, res, cb);
    }, next);
  };
}

app.use(parallel([
  getUser,
  getSiteList,
  getCurrentSite,
  getSubscription
]));

But the problem is, my routes have accessFilter, parser & so on. They look like this:

const jsonParser = bodyParser.json({
  limit: "1mb",
});

const accessFilter = accessFilterMiddleware(Registry.list());
const localDevFilter = localDevFilterMiddleware(Registry.list());

const apiRoutes: Router = Router();


apiRoutes.get("/", listProducts);
apiRoutes.get("/healthz", cProductHealth);
apiRoutes.get("/:id", accessFilter, localDevFilter, fetchProductData);
apiRoutes.post(
  "/:id",
  accessFilter,
  localDevFilter,
  jsonParser,
  fetchProductData,
);
apiRoutes.get(
  "/:id/fields/:fieldId/options",
  accessFilter,
  localDevFilter,
  fetchProductOptions,
);
apiRoutes.post(
  "/:id/loadmoreoptions",
  accessFilter,
  localDevFilter,
  jsonParser,
  loadMoreOptions,
);
apiRoutes.post("/:id/ploy", accessFilter, jsonParser, fetchMultipleProductData);
apiRoutes.post(
  "/:id/gxx",
  accessFilter,
  localDevFilter,
  jsonParser,
  fetchGssData,
);
apiRoutes.get("/:id/healthz", collectProductHealth);

Question: How can I use the async.js framework to achieve this for my express POST & GET routes with parameters ?



from async.parallel / async.each for POST request with accessFilter, parser

No comments:

Post a Comment