<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Node.js - Форум программистов и сисадминов Киберфорум</title>
		<link>https://www.cyberforum.ru/</link>
		<description>Форум программистов Node.js JavaScript. Обсуждение Node.js - серверной реализации JavaScript.</description>
		<language>ru</language>
		<lastBuildDate>Tue, 19 May 2026 10:00:04 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Node.js - Форум программистов и сисадминов Киберфорум</title>
			<link>https://www.cyberforum.ru/</link>
		</image>
		<item>
			<title>Не выводит сумму корзины в консоли - Node.js</title>
			<link>https://www.cyberforum.ru/nodejs/thread3223151.html</link>
			<pubDate>Fri, 15 May 2026 23:45:27 GMT</pubDate>
			<description><![CDATA[вот модель sequelize 
const sequelize = require('../db') 
const {DataTypes} = require('sequelize')...]]></description>
			<content:encoded><![CDATA[<div>вот модель sequelize<br />
<div class="printablecode">
	<div class="smallfont">:</div>
	<hr /><code dir="ltr">const sequelize = require('../db')<br />
const {DataTypes} = require('sequelize')<br />
<br />
const User = sequelize.define('user', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
&nbsp; &nbsp; email: {type: DataTypes.STRING, unique: true,},<br />
&nbsp; &nbsp; password: {type: DataTypes.STRING},<br />
&nbsp; &nbsp; role: {type: DataTypes.STRING, defaultValue: &quot;USER&quot;},<br />
})<br />
<br />
const Basket = sequelize.define('basket', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
})<br />
<br />
const BasketDevice = sequelize.define('basket_device', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
&nbsp; &nbsp; quantity: {type: DataTypes.INTEGER, defaultValue: 1},<br />
})<br />
<br />
const Device = sequelize.define('device', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
&nbsp; &nbsp; name: {type: DataTypes.STRING, unique: true, allowNull: false},<br />
&nbsp; &nbsp; price: {type: DataTypes.INTEGER, allowNull: false},<br />
&nbsp; &nbsp; rating: {type: DataTypes.INTEGER, defaultValue: 0},<br />
&nbsp; &nbsp; img: {type: DataTypes.STRING, allowNull: false},<br />
})<br />
<br />
const Type = sequelize.define('type', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
&nbsp; &nbsp; name: {type: DataTypes.STRING, unique: true, allowNull: false},<br />
})<br />
<br />
const Brand = sequelize.define('brand', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
&nbsp; &nbsp; name: {type: DataTypes.STRING, unique: true, allowNull: false},<br />
})<br />
<br />
const Rating = sequelize.define('rating', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
&nbsp; &nbsp; rate: {type: DataTypes.INTEGER, allowNull: false},<br />
})<br />
<br />
const DeviceInfo = sequelize.define('device_info', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
&nbsp; &nbsp; title: {type: DataTypes.STRING, allowNull: false},<br />
&nbsp; &nbsp; description: {type: DataTypes.STRING, allowNull: false},<br />
})<br />
<br />
const TypeBrand = sequelize.define('type_brand', {<br />
&nbsp; &nbsp; id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true},<br />
})<br />
<br />
<br />
User.hasOne(Basket)<br />
Basket.belongsTo(User)<br />
<br />
User.hasMany(Rating)<br />
Rating.belongsTo(User)<br />
<br />
Basket.hasMany(BasketDevice)<br />
BasketDevice.belongsTo(Basket)<br />
<br />
Type.hasMany(Device)<br />
Device.belongsTo(Type)<br />
<br />
Brand.hasMany(Device)<br />
Device.belongsTo(Brand)<br />
<br />
Device.hasMany(Rating)<br />
Rating.belongsTo(Device)<br />
<br />
Device.hasMany(BasketDevice)<br />
BasketDevice.belongsTo(Device)<br />
<br />
Device.hasMany(DeviceInfo, {as: 'info'});<br />
DeviceInfo.belongsTo(Device)<br />
<br />
Type.belongsToMany(Brand, {through: TypeBrand })<br />
Brand.belongsToMany(Type, {through: TypeBrand })<br />
<br />
module.exports = {<br />
&nbsp; &nbsp; User,<br />
&nbsp; &nbsp; Basket,<br />
&nbsp; &nbsp; BasketDevice,<br />
&nbsp; &nbsp; Device,<br />
&nbsp; &nbsp; Type,<br />
&nbsp; &nbsp; Brand,<br />
&nbsp; &nbsp; Rating,<br />
&nbsp; &nbsp; TypeBrand,<br />
&nbsp; &nbsp; DeviceInfo<br />
}</code><hr />
</div>вот расчет суммы<br />
<div class="printablecode">
	<div class="smallfont">:</div>
	<hr /><code dir="ltr"> const basketItems = await BasketDevice.findAll({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where: { basketId },<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include: &#91;{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; model: Device,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attributes: &#91;'price'&#93;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&#93;<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; let totalSum = 0;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; basketItems.forEach(item =&gt; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const quantity = Number(item.quantity);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const price = Number(item.Device.price);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalSum += quantity * price;<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; console.log('Общая сумма:', totalSum);</code><hr />
</div>вот что выдает в консоли Executing (default): SELECT count(*) AS `count` FROM `devices` AS `device`;<br />
Executing (default): SELECT `id`, `name`, `price`, `rating`, `img`, `createdAt`, `updatedAt`, `typeId`, `brandId` FROM `devices` AS `device` LIMIT 0, 2;<br />
Executing (default): SELECT `id`, `name`, `createdAt`, `updatedAt` FROM `types` AS `type`;<br />
Executing (default): SELECT `id`, `name`, `createdAt`, `updatedAt` FROM `brands` AS `brand`;<br />
Executing (default): SELECT count(*) AS `count` FROM `devices` AS `device`;<br />
Executing (default): SELECT `id`, `name`, `price`, `rating`, `img`, `createdAt`, `updatedAt`, `typeId`, `brandId` FROM `devices` AS `device` LIMIT 0, 2;<br />
<br />
<font size="1"><font color="grey"><i>Добавлено через 5 часов 46 минут</i></font></font><br />
решил пойти дальше и вывести тотал в реакт, после изменения кода реакт не загружает страницу, хотя до этого показывал<br />
<div class="printablecode">
	<div class="smallfont">:</div>
	<hr /><code dir="ltr">async getAll(req, res) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; //получаем basketId<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (!req.headers.authorization) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return res.status(401).json({ message: 'Авторизация не предоставлена' });<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; const authHeader = req.headers.authorization;<br />
&nbsp; &nbsp; &nbsp; &nbsp; const tokenParts = authHeader.split(' ');<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (tokenParts.length !== 2 || tokenParts&#91;0&#93; !== 'Bearer') {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return res.status(401).json({ message: 'Некорректный формат заголовка авторизации' });<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; const token = tokenParts&#91;1&#93;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; const jwtSecret = process.env.SECRET_KEY;<br />
&nbsp; &nbsp; &nbsp; &nbsp; const decoded = jwt.verify(token, jwtSecret); // Это объект с данными, например, { id: 1, email: '...' }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; const base64Url = token.split('.')&#91;1&#93;;<br />
&nbsp; &nbsp; &nbsp; &nbsp; if (!base64Url) {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return res.status(401).json({ message: 'Некорректный токен' });<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; const payloadStr = Buffer.from(base64Url, 'base64').toString('utf-8');<br />
&nbsp; &nbsp; &nbsp; &nbsp; const payload = JSON.parse(payloadStr);<br />
&nbsp; &nbsp; &nbsp; &nbsp; const basket=await Basket.findOne({where: {userId:payload.id}});<br />
&nbsp; &nbsp; &nbsp; &nbsp; const basketId=basket.id;<br />
<br />
<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; const device = await Device.findAll({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include: &#91;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; model: BasketDevice,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where: { basketId: basketId },<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attributes: &#91;&#93; // не выводим данные из связующей таблицы, если не нужны<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; },<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#93;<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; const basketItems = await BasketDevice.findAll({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where: { basketId },<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; include: &#91;{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; model: Device,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attributes: &#91;'price'&#93;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&#93;<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; let totalSum = 0;<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; basketItems.forEach(item =&gt; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const quantity = Number(item.quantity);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const price = Number(item.Device.price);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalSum += quantity * price;<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; console.log('Общая сумма:', totalSum);<br />
&nbsp; &nbsp; &nbsp; &nbsp; return res.json({<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; devices: device,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; totalSum: totalSum<br />
&nbsp; &nbsp; &nbsp; &nbsp; });<br />
&nbsp; &nbsp; }</code><hr />
</div><div class="printablecode">
	<div class="smallfont">:</div>
	<hr /><code dir="ltr">import React, { useEffect, useState } from 'react';<br />
import { fetchDevicesFromBasket } from &quot;../http/userAPI&quot;;<br />
import { DEVICE_ROUTE } from &quot;../utils/consts&quot;;<br />
import { Card, Col } from &quot;react-bootstrap&quot;;<br />
import Image from &quot;react-bootstrap/Image&quot;;<br />
import star from &quot;../assets/star.png&quot;;<br />
import { useHistory } from &quot;react-router-dom&quot;;<br />
<br />
const Basket = () =&gt; {<br />
&nbsp; &nbsp; const &#91;device, setDevice&#93; = useState({ devices: &#91;&#93;, totalSum: 0 })<br />
&nbsp; &nbsp; const history = useHistory()<br />
<br />
&nbsp; &nbsp; useEffect(() =&gt; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; fetchDevicesFromBasket().then(data =&gt; setDevice(data))<br />
&nbsp; &nbsp; }, &#91;&#93;)<br />
<br />
&nbsp; &nbsp; return (<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {/* Обновил здесь: device.devices.map */}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {device.devices &amp;&amp; device.devices.length &gt; 0 &amp;&amp; (<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; device.devices.map(item =&gt; (<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Col key={item.id} md={3} className={&quot;mt-3&quot;} onClick={() =&gt; history.push(DEVICE_ROUTE + '/' + item.id)}&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Card style={{ width: 150, cursor: 'pointer' }} border={&quot;light&quot;}&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Image width={150} height={150} src={process.env.REACT_APP_API_URL + item.img} /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div className=&quot;text-black-50 mt-1 d-flex justify-content-between align-items-center&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&gt;{item.name}&lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div className=&quot;d-flex align-items-center&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&gt;{item.rating}&lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Image width={18} height={18} src={star} /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div&gt;Price: {item.price}&lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/Card&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/Col&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ))<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; )}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {/* Итоговая сумма */}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Итого: {device.totalSum}<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt;<br />
&nbsp; &nbsp; );<br />
};<br />
<br />
export default Basket;</code><hr />
</div>данные отправляются методом get</div>

]]></content:encoded>
			<category domain="https://www.cyberforum.ru/nodejs/">Node.js</category>
			<dc:creator>Norail</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/nodejs/thread3223151.html</guid>
		</item>
	</channel>
</rss>
