На чем обычно делают бэкенд для SPA?
PHP, Python, Java, Go. В общем на любом языке программирования на котором можно реализовать работу с сетью.
Если на фронте выбор достаточно большой
 э... js, или.. js?))Есть ли еще нормальные варианты?
nodejs - не нормальный вариант, увы. Да, есть маленькие задачи, для которых он хорош, но не более, увы.
В остальном - все зависит от проекта, чаще всего php / python, у хипстеров ruby, у энтерпрайз решений java, сейчас набирает популярность Go. Есть парни, что Erlang/Scala/Haskell упарываются, но часто это фатальный выбор.