чот вы смешали тёплое и мягкое.
по классике: на js пилится фронт на чем угодно, который по API общается с бэком, который написан на чём угодно.
по особенному: есть фреймворки/подходы, пытающиеся скрестить это в одном: блейзор для нет, ваадин для явы, лайвваер для пхп и всё такое.
решать только вам. в чистом виде бэк вообще никак не связан с фронтом, кроме как через API.