For Express behind a load balancer or orchestrator, keep the liveness route process-only: return 200 when the Node event loop is up and the listener is bound. Put Mongo, Redis, or queue depth on a separate readiness path so a brief dependency blip does not flip the probe that drives restarts. Match the path and port the target group or probe actually hits to what app.listen binds, and avoid auth or heavy middleware on those routes.
Ops prove-out after the first stable deploy: hit liveness and readiness from the same network the balancer uses, confirm liveness stays green while readiness fails if you stop a dependency, then restore the dependency and watch readiness recover without a task or pod restart. If the target flaps, check container port mapping, security groups, and whether the health path still waits on something that is not ready at start.