سلام خسته نباشید ...
من یه پروژه فروشگاهی دارم که کاربر این امکان رو داره محصولات رو بوکمارک کنه
واین بوکمارت تو اطلاعات مربوط به دیتای یوزر ذخیره میشه (زمانی که عمل ذخیره انجام میشه فقط آیدی مربوطه رو ذخیره نمیکنه تمام دیتاهای مربوط به محصول ذخیره میشه)
الان که تست کردم یه محدودیتی داره که بیشتر از مثلا 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;
کلی دربارش سرچ زدم و مطالعه کردم همه یه چیزو میگن که توی 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
این ارور رو از ترمینال بک اند میگیرم
PATCH /user/addBookmark 413 3.242 ms - 2011
PayloadTooLargeError: request entity too large
و این ارور کنسول مرورگر
سلام.
من تخصصی نه در زمینه Node دارم نه مونگو
اما کنسولت داره ارور CORS رو لاگ میزنه. که باید توی بک اندت ستش کنی.
به عبارتی در این نمونه CORS مکانیزمی هست که اجاره میده فرانت شما به طور مثال localhost:3000 از بک شما localhost:4000 بدون محدودیت استفاده کنه
سلام وقت بخیر
باید یه میدلور بنویسی که بیاد یه سری هدر به درخواست هات اضافه کنه ببین با این کار مشکلت حل میشه یا نه
// اضافه کردن این کد ها به هدر قبل از ارسال درخواست
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();
});
این کد رو اضافه کن ببین با این اجازه دسنرسی ها بازم اررور توی عکس رو میگیری یا نه
@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,
}));
این کد هارو اضافه کن
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
فکر کنم چون حجم دیتا زیاد شده میگه محدودیت داری حالا با این دستورات محدودیت رو تا 50 مگ افزایش بده ببین مشکلت حل میشه یا نه
حجم دیتاها همش 100kb هستش
اینارو اضافه کردم و هنوز همین ارور رو میگیرم
timeout رو هم ست کردم رو 1000
کلی دربارش سرچ زدم و مطالعه کردم همه یه چیزو میگن که توی 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
ممنونم درست شد
فقط یه سوالی برام پیش اومده
من از اکسپرس 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,
}));
ممنونم که وقت گذاشتید❤️
بله میتونید تغییر بدید حالا اگه نمیخواید تغییر بدید و مشکلی هم ایجاد نکرده میتونید تغییر ندید اما اگه بعدا ارروری دریافت کردید تغییر بدید
خواهش میکنم انجام وضیفه هست
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟