x
11 ماه پیش توسط x مطرح شد
10 پاسخ

بیش از 50 تا محصول ذخیره نمیکنه

سلام خسته نباشید ...
من یه پروژه فروشگاهی دارم که کاربر این امکان رو داره محصولات رو بوکمارک کنه
واین بوکمارت تو اطلاعات مربوط به دیتای یوزر ذخیره میشه (زمانی که عمل ذخیره انجام میشه فقط آیدی مربوطه رو ذخیره نمیکنه تمام دیتاهای مربوط به محصول ذخیره میشه)
الان که تست کردم یه محدودیتی داره که بیشتر از مثلا 50 محصول کاربر نمیتونه بوکمارک کنه

از MongoDB و بک اند Nodejs و فرانت reactjs دارم استفاده میکنم
تمام کدهامو بررسی کردم هم بک اند و هم فرانت اما مشکلی نتونستم پیدا کنم

چیکار کنم که محدودیتی برای بوکمارک وجود نداشته باشه؟

Api یوزر.......

import { useState, useEffect } from "react";
import Instance from "./InstanceApi"

function UserAPI(token) {
  const [isLogged, setIsLogged] = useState(false);
  const [isAdmin, setIsAdmin] = useState(false);
  const [bookmark, setBookmark] = useState([]);

  const addBookmark = async (product) => {

    const check = bookmark.every((item) => {
      return item._id !== product._id;
    });

    if (check) {
      setBookmark([...bookmark, { ...product, quantity: 1 }]);

      await Instance({
        url: "/user/addBookmark",
        method: "PATCH",
        data: { bookmark: [...bookmark, { ...product, quantity: 1 }] },
        headers: { Authorization: token }
      })
    } else {
    }
  };

  return {
    isLogged: [isLogged, setIsLogged],
    isAdmin: [isAdmin, setIsAdmin],
    bookmark: [bookmark, setBookmark],
    addBookmark: addBookmark,
  };
}

export default UserAPI;

ثبت پرسش جدید
میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش آپدیت شد
2

کلی دربارش سرچ زدم و مطالعه کردم همه یه چیزو میگن که توی express و node js که درخواست json میزنی حداکثر 100 کیلوبایت میتونه دیتا رد و بدل بشه اگه دیتا از این حجم بیشتر بشه حتی 1 کیلوبایت اررور 413 رو بر میگردونه که میشه همون too large که میگن باید حجمش رو افضایش بدی مشکل حل میشه ببینید برای express نسخه 3 و 4 یه خورده متفاوت هست نسخه express رو چک کن بر اساس اون این کد هایی که میزارم رو با دقت بزار تو پروژه

const express = require('express');
const bodyParser = require('body-parser');

// Express 4.0
app.use(bodyParser.json({ limit: '10mb' }));
app.use(bodyParser.urlencoded({ extended: true, limit: '10mb' }));

// Express 3.0
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ limit: '10mb' }));

که به احتمال زیاد از express 4 استفاده میکنی با این دستور میتونی ورژن express رو دربیاری

npm list express

x
تخصص : هیچولوژیست
@SZaaaa1111 11 ماه پیش مطرح شد
0

این ارور رو از ترمینال بک اند میگیرم

PATCH /user/addBookmark 413 3.242 ms - 2011
PayloadTooLargeError: request entity too large

و این ارور کنسول مرورگر
 تصویر


پویا باقری
تخصص : برنامه نویس وب
@Pouyab 11 ماه پیش مطرح شد
0

سلام.
من تخصصی نه در زمینه Node دارم نه مونگو
اما کنسولت داره ارور CORS رو لاگ میزنه. که باید توی بک اندت ستش کنی.
به عبارتی در این نمونه CORS مکانیزمی هست که اجاره میده فرانت شما به طور مثال localhost:3000 از بک شما localhost:4000 بدون محدودیت استفاده کنه


x
تخصص : هیچولوژیست
@SZaaaa1111 11 ماه پیش مطرح شد
0

@Pouyab
بک اند و فرانت تو هر دوش ست شدن
کلا تمامی قسمت ها درست عمل میکنه ولی وقتی کاربر بیش از 50 محصول رو به لیستش اضافه میکنه این خطا و دریافت میکنه

نمیدونم دقیقا چطور باید درستش کنم😥


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش مطرح شد
1

سلام وقت بخیر
باید یه میدلور بنویسی که بیاد یه سری هدر به درخواست هات اضافه کنه ببین با این کار مشکلت حل میشه یا نه

// اضافه کردن این کد ها به هدر قبل از ارسال درخواست
app.use(function (req, res, next) {

    // وب‌سایتی که می‌خواهی به اون اجازه اتصال بدی
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8888');

    // درخواست هایی که میخوای اجازه داشتن باشن
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');

    res.setHeader('Access-Control-Allow-Credentials', true);

    next();
});

این کد رو اضافه کن ببین با این اجازه دسنرسی ها بازم اررور توی عکس رو میگیری یا نه


x
تخصص : هیچولوژیست
@SZaaaa1111 11 ماه پیش آپدیت شد
0

@FullStack
سلام ممنون از شما

این کد رو هم که اضافه کردم بازم ارور 413 از بین نرفت

 تصویر

میدلورهای من

// middlewares
app.use(morgan("dev"));
app.use(bodyParser.json());
app.use(cookieParser());
app.use(expressValidator());
app.use(cors(corsOptions));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(helmet());
app.use(compression());
app.use(session({
    name: "cookie",
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: true,
  }));

میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش مطرح شد
1

این کد هارو اضافه کن

app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));

فکر کنم چون حجم دیتا زیاد شده میگه محدودیت داری حالا با این دستورات محدودیت رو تا 50 مگ افزایش بده ببین مشکلت حل میشه یا نه


x
تخصص : هیچولوژیست
@SZaaaa1111 11 ماه پیش مطرح شد
0

@FullStack

حجم دیتاها همش 100kb هستش
اینارو اضافه کردم و هنوز همین ارور رو میگیرم
timeout رو هم ست کردم رو 1000


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش آپدیت شد
2

کلی دربارش سرچ زدم و مطالعه کردم همه یه چیزو میگن که توی express و node js که درخواست json میزنی حداکثر 100 کیلوبایت میتونه دیتا رد و بدل بشه اگه دیتا از این حجم بیشتر بشه حتی 1 کیلوبایت اررور 413 رو بر میگردونه که میشه همون too large که میگن باید حجمش رو افضایش بدی مشکل حل میشه ببینید برای express نسخه 3 و 4 یه خورده متفاوت هست نسخه express رو چک کن بر اساس اون این کد هایی که میزارم رو با دقت بزار تو پروژه

const express = require('express');
const bodyParser = require('body-parser');

// Express 4.0
app.use(bodyParser.json({ limit: '10mb' }));
app.use(bodyParser.urlencoded({ extended: true, limit: '10mb' }));

// Express 3.0
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ limit: '10mb' }));

که به احتمال زیاد از express 4 استفاده میکنی با این دستور میتونی ورژن express رو دربیاری

npm list express

x
تخصص : هیچولوژیست
@SZaaaa1111 11 ماه پیش آپدیت شد
0

@FullStack

ممنونم درست شد
فقط یه سوالی برام پیش اومده

من از اکسپرس 4 استفاده میکنم و میدلوری که دارم الان به اینصورته و شما گفتید برای اکسپرس 3 به اون صورت باید نوشت
urlencoded رو هم باید به بادی پارسر تغییرش بدم یا نمیخواد؟

app.use(morgan("dev"));
app.use(bodyParser.json({limit: '10mb'})); 
app.use(cookieParser());
app.use(expressValidator());
app.use(cors(corsOptions));
app.use(express.json({limit: '10mb'}));
app.use(express.urlencoded({ extended: false, limit: '10mb', parameterLimit: 100000})); //endcoded رو هم باید به بادی پارسر تغییرش بدم یا نمیخواد؟
app.use(helmet());
app.use(compression());
app.use(session({
    name: "cookie",
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: true,
  }));

ممنونم که وقت گذاشتید❤️


میکائیل
تخصص : برنامه نویسی سمت سرور و کلاینت
@FullStack 11 ماه پیش آپدیت شد
1

بله میتونید تغییر بدید حالا اگه نمیخواید تغییر بدید و مشکلی هم ایجاد نکرده میتونید تغییر ندید اما اگه بعدا ارروری دریافت کردید تغییر بدید
خواهش میکنم انجام وضیفه هست


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام