【发布时间】:2021-12-13 09:11:14
【问题描述】:
我使用express v4.17.1 并想让我的 app.use() 中间件并行运行。
所以我在网上找到了一些例子。
示例:
function runInParallel() {
async.parallel([
getUserProfile,
getRecentActivity,
getSubscriptions,
getNotifications
], function(err, results) {
//This callback runs when all the functions complete
});
}
但我的应用程序中的内容是:
const app = express();
const APP_FOLDER = "bdt";
app.use(httpContext.middleware);
app.use(metricsMiddleware);
app.use(rtEndMiddleware);
app.use(trackingContextMiddleware);
app.use(healthRoutes());
app.use("/" + APP_FOLDER + "/api/products", productsRoutes);
app.use("/tcalc/" + APP_FOLDER + "/api/products", productsRoutes);
productRoutes 是这样的:
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);
我认为对于第一个应该很容易:
async.parallel([
httpContext.middleware,
metricsMiddleware,
rtEndMiddleware,
trackingContextMiddleware,
healthRoutes()
], function(err, results) {
//This callback runs when all the functions complete
});
但我的问题是:在这种情况下,如何使用第二个参数(productRoutes)来做到这一点?
app.use("/" + APP_FOLDER + "/api/products", productsRoutes);
app.use("/tcalc/" + APP_FOLDER + "/api/products", productsRoutes);
【问题讨论】:
-
“想让我的路线并行运行”请解释一下
-
为什么不创建一个路由并使用 promise all 从多个服务中获取结果。 developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/…
-
您要并行运行的四个中间件必须以某种方式协作,以便为每个传入请求
req生成 一个 响应res。你能解释一下他们的合作将如何运作吗?例如,每个中间件都可以贡献一些 HTML,但最终会在整个响应中以随机顺序结束。 -
我已更新我的问题以更准确。 @HeikoTheißen
标签: javascript express async.js