Включить модуль js в шаблон руля

У меня есть следующие файлы:

server.js:

app.get('/main/:id', function(req, res) {
    res.render('main', { products: products });
})

main.hbs:

<div class = "products">
    {{#each products }}
        {{ this.product_id }}
        {{ this.product_name }}
    {{/each}}
</div>


<script>
$(document).ready(function() {
    $(".add-to-cart").click(function() {
        const products = {
            item_id: $(this).attr('item_id'),
            item_name: $(this).attr('item_name'),
        }

        shopping_cart = new ShoppingCart();
        shopping_cart.addtoCart(products);
    })
})
</script>

скрипты / shopping_cart.js:

function ShoppingCart() {
    this.addtoCart = function(products) {
        //save products to server etc..
    }
}

module.exports = ShoppingCart;

Единственная проблема, с которой я столкнулся, это то, что я безуспешно пытаюсь включить скрипт shopping_cart "в файл main.hbs.

сначала сделал в main.hbs:

<script src = "../scripts/shopping_cart.js"></script>

но затем я получил ошибку в браузере: «Uncaught ReferenceError: модуль не определен»

чем я попытался упаковать его в файл bundle.js: и у меня нет ошибки, но если я нажму кнопку «добавить в корзину», я получу: «Неперехваченная ошибка ссылки: ShoppingCart не определен»

Пожалуйста, помогите мне понять, как правильно включить файл shopping_cart.js и создать новый экземпляр класса.

Благодарю.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 186
1

Ответы 1

Вы наталкиваетесь на очень типичный камень преткновения, который многие люди спотыкают, начиная с frontend + backend js.

module.exports - это код nodejs, он не будет работать в браузере. Вам нужно будет написать свой shopping_cart.js на обычном JavaScript без использования функций и объектов nodejs. В этом случае вы сможете просто опустить module.exports. Но это похоже на большую путаницу.

Вы должны изучить JavaScript и nodejs отдельно, особенно если вы новичок в одном или обоих. Хотя некоторые компоненты можно использовать совместно, это, к сожалению, немного сложнее, чем простой module.exports. Я бы посоветовал сначала изучить некоторые уроки по JavaScript в обычном интерфейсе (браузере), поскольку они не имеют понятия о таких вещах, как module.exports или require('...').

Другие вопросы по теме