admin管理员组文章数量:1122826
I'm trying to work with product adding but there's a problem no matter how I set the withCredentials to true. Still the backend responds with an error 'User not found'. It's as if it can't detect the token that was stored inside the cookie
This is my addProduct function in my productController:
export const addProduct = async (req, res) => {
try {
const { userId, name, description, price, category, subCategory, sizes, bestseller } = req.body;
const image1 = req.files.image1 && req.files.image1[0];
const image2 = req.files.image2 && req.files.image2[0];
const image3 = req.files.image3 && req.files.image3[0];
const image4 = req.files.image4 && req.files.image4[0];
const images = [image1, image2, image3, image4].filter(item => item !== undefined);
let imagesUrl = await Promise.all(
images.map(async item => {
let result = await cloudinary.uploader.upload(item.path, {
resource_type: "image",
});
return result.secure_url;
})
);
const productData = {
name,
description,
category,
price: Number(price),
subCategory,
bestseller: bestseller === "true",
sizes: JSON.parse(sizes),
image: imagesUrl,
date: Date.now(),
};
// Add product to seller's products array
const seller = await sellerModel.findById(userId);
if (!seller) {
return res.json({ success: false, msg: "Seller not found" });
}
console.log(userId)
seller.products.push(productData);
await seller.save();
res.json({ success: true, msg: "Product Added" });
} catch (err) {
console.log(err);
res.json({ success: false, msg: err.message });
}
};
Add.jsx code:
import { useState } from 'react'
import { assets } from '../assets/seller_assets/assets'
import axios from 'axios'
import { backendUrl } from '../App'
import { toast } from 'react-toastify'
const Add = () => {
const [image1, setImage1] = useState(false)
const [image2, setImage2] = useState(false)
const [image3, setImage3] = useState(false)
const [image4, setImage4] = useState(false)
const [name, setName] = useState('');
const [description, setDescription] = useState("")
const [price, setPrice] = useState("")
const [category, setCategory] = useState("Men");
const [subCategory, setSubCategory] = useState("Topwear");
const [bestseller, setBestSeller] = useState(false);
const [sizes, setSizes] = useState([])
const onSubmitHandler = async (e) => {
e.preventDefault();
try {
const formData = new FormData();
formData.append("name", name);
formData.append("description", description)
formData.append("price", price)
formData.append("category", category)
formData.append("subCategory", subCategory)
formData.append("bestseller", bestseller)
formData.append("sizes", JSON.stringify(sizes))
image1 && formData.append("image1", image1);
image2 && formData.append("image2", image2);
image3 && formData.append("image3", image3);
image4 && formData.append("image4", image4);
const response = await axios.post(backendUrl+'/api/seller/add',formData,{headers: {"Content-Type": "multipart/form-data"}, withCredentials:true})
if(response.data.success) {
toast.success(response.data.msg);
setName('')
setDescription('')
setPrice('')
setImage1(false)
setImage2(false)
setImage3(false)
setImage4(false)
setBestSeller(false)
}else {
toast.error(response.data.msg)
}
} catch (error) {
console.log(error.message)
toast.error(error.message)
}
}
return (
<form onSubmit={onSubmitHandler} className='flex flex-col w-full items-start gap-3' >
<div>
<p className='mb-2'>Upload Image</p>
<div className='flex gap-2'>
<label htmlFor="image1">
<img className='w-20' src={!image1 ? assets.upload_area: URL.createObjectURL(image1)} alt="" />
<input onChange={(e)=> setImage1(e.target.files[0])} type="file" id="image1" hidden />
</label>
<label htmlFor="image2">
<img className='w-20' src={!image2 ? assets.upload_area: URL.createObjectURL(image2)} alt="" />
<input onChange={(e)=> setImage2(e.target.files[0])} type="file" id="image2" hidden />
</label>
<label htmlFor="image3">
<img className='w-20' src={!image3 ? assets.upload_area: URL.createObjectURL(image3)} alt="" />
<input onChange={(e)=> setImage3(e.target.files[0])} type="file" id="image3" hidden />
</label>
<label htmlFor="image4">
<img className='w-20' src={!image4 ? assets.upload_area: URL.createObjectURL(image4)} alt="" />
<input onChange={(e)=> setImage4(e.target.files[0])} type="file" id="image4" hidden />
</label>
</div>
</div>
<div className='w-full'>
<p className='mb-2'>Product name</p>
<input onChange={(e) => setName(e.target.value)} value={name} className='w-full max-w-[500px] px-3 py-2' type="text" placeholder='Type here' required />
</div>
<div className='w-full'>
<p className='mb-2'>Product description</p>
<textarea onChange={(e) => setDescription(e.target.value)} value={description} className='w-full max-w-[500px] px-3 py-2' type="text" placeholder='Write content here' required />
</div>
<div className='flex flex-col sm:flex-row gap-2 w-full sm:gap-8'>
<div>
<p className='mb-2'>Product Category</p>
<select onChange={(e) => setCategory(e.target.value)} className='w-full px-3 py-2'>
<option value="Men">Men</option>
<option value="Women">Women</option>
<option value="Kids">Kids</option>
<option value="Foods">Foods</option>
<option value="Gadgets">Gadgets</option>
</select>
</div>
<div>
<p className='mb-2'>Sub Category</p>
<select onChange={(e) => setSubCategory(e.target.value)} className='w-full px-3 py-2'>
<option value="Topwear">Topwear</option>
<option value="Bottomwear">Bottomwear</option>
<option value="Winterwear">Winterwear</option>
<option value="Main Dish">Main Dish</option>
<option value="Breakfast Favourites">Breakfast Favourites</option>
<option value="Smart Phones">Smart Phones</option>
</select>
</div>
<div>
<p className='mb-2'>Product Price</p>
<input onChange={(e)=> setPrice(e.target.value)} value={price} className='w-full px-3 py-2 sm:w-[120px]' type="Number" placeholder='25' />
</div>
</div>
<div>
<p className='mb-2'>Product Sizes</p>
<div className='flex gap-3'>
<div onClick={() => setSizes(prev => prev.includes("S")? prev.filter(item => item !== 'S'):[...prev,"S"])}>
<p className={`${sizes.includes('S') ? "bg-pink-100" : "bg-slate-200"} bg-slate-200 px-3 py-1 cursor-pointer`}>S</p>
</div>
<div onClick={() => setSizes(prev => prev.includes("M")? prev.filter(item => item !== 'M'):[...prev,"M"])}>
<p className={`${sizes.includes('M') ? "bg-pink-100" : "bg-slate-200"} bg-slate-200 px-3 py-1 cursor-pointer`}>M</p>
</div>
<div onClick={() => setSizes(prev => prev.includes("L")? prev.filter(item => item !== 'L'):[...prev,"L"])}>
<p className={`${sizes.includes('L') ? "bg-pink-100" : "bg-slate-200"} bg-slate-200 px-3 py-1 cursor-pointer`}>L</p>
</div>
<div onClick={() => setSizes(prev => prev.includes("XL")? prev.filter(item => item !== 'XL'):[...prev,"XL"])}>
<p className={`${sizes.includes('XL') ? "bg-pink-100" : "bg-slate-200"} bg-slate-200 px-3 py-1 cursor-pointer`}>XL</p>
</div>
<div onClick={() => setSizes(prev => prev.includes("XXL")? prev.filter(item => item !== 'XXL'):[...prev,"XXL"])}>
<p className={`${sizes.includes('XXL') ? "bg-pink-100" : "bg-slate-200"} bg-slate-200 px-3 py-1 cursor-pointer`}>XXL</p>
</div>
</div>
</div>
<div className='flex gap-2 mt-2'>
<input onChange={()=> setBestSeller(prev => !prev)} checked={bestseller} type="checkbox" id="bestseller" />
<label className='cursor-pointer' htmlFor="bestseller">Add to bestseller</label>
</div>
<button type="submit" className='w-28 py-3 mt-4 bg-black text-white'>ADD</button>
</form>
)
}
export default Add
本文标签: javascriptUSER ID NOT FOUNDStack Overflow
版权声明:本文标题:javascript - USER ID NOT FOUND - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736281700a1926401.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论