Держать всю память забитой на основном сервере очень нежелательно. Часто нужно оставлять 40-50% памяти свободной под дисковый кеш ОС.
Вынесете базу на отдельный виртуальный сервер. Например, с VDS на Линоде это вообще не проблема, все купленные ресурсы там делятся среди нескольких виртуальных машин в любых пропорциях.
> а почему не все вместе обернуть в трай кетч?
Потому что нельзя обернуть асинхронный вызов в try/catch. Смотрите на второй кусок кода в вопросе: Вы ставите обработчик в строке auth.getUser, затем выходите из фунции request и блок try/catch пройден без исключения. А позже, когда getUser вызовет обработчик, вы проверите user.auth, у вас произойдет исключение, которое ни в один try/catch не входит.
В ноде и так не сильно в чести исключения, некоторые методы (для работы с файлами, например), имеют колбаки как описали вы (первым параметром error), некоторые объекты стреляют событием .on('error'). Но полностью от исключений это, естественно не избавляет.
У меня нет проблем с современным интерфейсом, мне нравится новая панель задач, я в принципе даже против Аэро ничего против не имею, просто хочу эту грязь с фона убрать :)
Кстати, важная деталь: Редирект тоже должен быть на javascript, чтобы поисковики по нему не перешли.
Кроме параметра есть вариант проверять наличие заголовка «X-Requested-With: XMLHttpRequest, но это считается менее надежным из-за различных прокси-серверов, которые могут его резать.