Белые люди решают эту задачу так. Бэкэнд (в Вашем случае expressJS) формирует ссылки на статику таким образом, что они содержат в себе указание на тему, например
/static/my_theme/css/style.css
. В конфиге nginx пишется примерно вот так:
location /static/ {
root /home/example.com/static/;
access_log off;
autoindex off;
expires 30d;
}
Очевидно, в папке
/home/example.com/static/
лежат только публичные файлы, весь JavaScript должен лежать в других папках.
Таким образом, бэкэнд не торчит голой жопой наружу, nginx успешно выполняет работу, для которой предназначен, GET запросы остаются идемпотентными, а у Вас остаётся возможность без лишней боли вынести статику в CDN при необходимости.