Задать вопрос
@Popkornikus

Почему не подключается Js скрипт?

Добрый день. Не подключается js скрип к сайту, выдает ошибку net::ERR_ABORTED 404 (Not Found). Пробовал сделать папку статической с помощью
app.use(express.static(path.join(__dirname, 'public')))

Но ошибка никуда не пропала. Пытаюсь подключить reglog.js

Весь проект
5fc163950e0a5301212983.jpeg

main.hbs
{{> head}}
<body>
<header>
    {{> navbar}}
</header>
    {{{ body }}}
</body>
<div>
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
    <script src="public/reglog.js"></script>
</div>
</html>
  • Вопрос задан
  • 1143 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
А Вы пробовали пройти Вашу строчку по шагам?
app.use( // 5
  express.static( // 4
    path.join( // 3
      __dirname, // 1
      'public' // 2
)))

1. __dirname - Содержит абсолютный путь до папки с файлом в котором выполняется (для примера пусть будет '/path/to/project')
2. 'public' - просто строчка
3. соединяем (1) и (2) как путь, получим '/path/to/project/public'
4. express.static - принимает путь из (3) и создает функцию которая обрабатывает запросы и ищет им соответствие в виде файлов в указанной папке
5. app.use - просто подключает функцию из (4) к движку express'а, без каких либо фильтров, то есть функция static обработает абсолютно все запросы которые дойдут до нее

Теперь смотрим на шаблон, в нем прописан скрипт public/reglog.js
Это относительный путь, то есть он автоматом соединится с путем от куда вызван
то есть если main.hbs отрисуется в условный site.com/index.html - то скрипт запросится из
а если main.hbs отрисуется в условный site.com/some/nested/index.html - то скрипт запросится из site.com/some/nested/public/reglog.js

Теперь представьте, в функцию 4 попадает запрос /some/nested/public/reglog.js
она соединяет ее с путем из (3) и получает путь /path/to/project/public/some/nested/public/reglog.js
потом смотрит его на диске и естественно ничего не находит, ставит в express response статус 404 и отдает управление дальше в express

для ленивых, которым готовый суп, а не разобраться почему
<script src="/reglog.js"></script>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы