JavaScript е чувствителен към имената на променливите. Имате User модел и User резултат със същото име.
Вашият код ще работи със следната промяна:
User.findById(id , function (err, user) {
/* ^ use small `u` */
if (err) return handleError(err)
/* rest of your code */
Също така имайте предвид, че по-нататък във вашия код вие декларирате друга променлива с име user . Ще трябва да промените това на нещо различно.