У меня есть следующие файлы:
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 и создать новый экземпляр класса.
Благодарю.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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