ยินดีต้อนรับสู่บทช่วยสอน React และ Node ของฉันเพื่อสร้างเว็บไซต์อีคอมเมิร์ซที่มีฟังก์ชันครบถ้วนเหมือนกับ Amazon เปิดตัวแก้ไขโค้ดของคุณและติดตามฉันในชั่วโมงถัดไปเพื่อสร้างเว็บไซต์อีคอมเมิร์ซโดยใช้สแต็ก MERN (MongoDB, ExpressJS, React และ Node.JS)
เฮโรกุ : https://react-amazona.herokuapp.com
กระจก Heroku: https://react-amazona-mirror.herokuapp.com
HTML5 และ CSS3: องค์ประกอบความหมาย, ตาราง CSS, Flexbox
ตอบสนอง: ส่วนประกอบ อุปกรณ์ประกอบฉาก เหตุการณ์ ตะขอ เราเตอร์ Axios
Redux: ร้านค้า ตัวลด การดำเนินการ
Node & Express: Web API, Body Parser, การอัพโหลดไฟล์, JWT
MongoDB: พังพอน การรวมตัว
การพัฒนา: ESLint, Babel, Git, Github,
การปรับใช้: Heroku
ดูบทช่วยสอน React & Node
$ git clone [email protected]:basir/amazona.git $ cd amazona
MongoDB ท้องถิ่น
ติดตั้งได้จากที่นี่
สร้างไฟล์ .env ในโฟลเดอร์รูท
ตั้งค่า MONGODB_URL=mongodb://localhost/amazona
Atlas คลาวด์ MongoDB
สร้างฐานข้อมูลที่ https://cloud.mongodb.com
สร้างไฟล์ .env ในโฟลเดอร์รูท
ตั้งค่า MONGODB_URL=mongodb+srv://your-db-connection
$ npm install $ npm start
# open new terminal $ cd frontend $ npm install $ npm start
เรียกใช้สิ่งนี้บน Chrome: http://localhost:5000/api/users/seed
จะส่งคืนอีเมลและรหัสผ่านของผู้ดูแลระบบ
รันสิ่งนี้บน Chrome: http://localhost:5000/api/products/seed
สร้างผลิตภัณฑ์ตัวอย่าง 6 รายการ
เรียกใช้ http://localhost:3000/signin
กรอกอีเมลและรหัสผ่านของผู้ดูแลระบบแล้วคลิกลงชื่อเข้าใช้
ถาม/ตอบ: https://webacademy.pro/amazona
ติดต่ออาจารย์ผู้สอน: Basir
ข้อมูลเบื้องต้นเกี่ยวกับหลักสูตรนี้
สิ่งที่คุณจะสร้าง
สิ่งที่คุณจะได้เรียนรู้
ซึ่งเป็นผู้ชม
ติดตั้งเครื่องมือ
โปรแกรมแก้ไขโค้ด
เว็บเบราว์เซอร์
ส่วนขยายรหัส VS
เทมเพลตเว็บไซต์
สร้างโฟลเดอร์อเมโซน่า
สร้างโฟลเดอร์เทมเพลต
สร้างดัชนี.html
เพิ่มรหัส HTML เริ่มต้น
ลิงค์ไปที่ style.css
สร้างส่วนหัว หลัก และส่วนท้าย
องค์ประกอบสไตล์
แสดงผลิตภัณฑ์
สร้างแผนกผลิตภัณฑ์
เพิ่มคุณลักษณะของผลิตภัณฑ์
เพิ่มลิงค์ รูปภาพ ชื่อ และราคา
สร้างแอป React
ส่วนหน้าของแอป create-react-app
เวลา 13.00 น. เริ่มต้น
ลบไฟล์ที่ไม่ได้ใช้
คัดลอกเนื้อหา index.html ไปยัง App.js
คัดลอกเนื้อหา style.css ไปยัง index.css
แทนที่คลาสด้วย className
แบ่งปันรหัสบน Github
เริ่มต้นพื้นที่เก็บข้อมูล git
ยอมรับการเปลี่ยนแปลง
สร้างบัญชี GitHub
สร้าง repo บน github
เชื่อมต่อ repo ท้องถิ่นกับ repo github
ผลักดันการเปลี่ยนแปลงไปยัง GitHub
สร้างการให้คะแนนและส่วนประกอบของผลิตภัณฑ์
สร้างส่วนประกอบ/Rating.js
สร้าง div.rating
สไตล์ div.rating, span และ span สุดท้าย
สร้างส่วนประกอบผลิตภัณฑ์
ใช้ส่วนประกอบการให้คะแนน
สร้างหน้าจอผลิตภัณฑ์
ติดตั้ง react-router-dom
ใช้ BrowserRouter และ Route สำหรับหน้าจอหลัก
สร้าง HomeScreen.js
เพิ่มรหัสรายการผลิตภัณฑ์ที่นั่น
สร้าง ProductScreen.js
เพิ่มเส้นทางใหม่จากรายละเอียดผลิตภัณฑ์ไปยัง App.js
สร้าง 3 คอลัมน์สำหรับรูปภาพผลิตภัณฑ์ ข้อมูล และการดำเนินการ
สร้างเซิร์ฟเวอร์ Node.JS
รัน npm init ในโฟลเดอร์รูท
อัปเดตประเภทชุด package.json: โมดูล
เพิ่ม .js ในการนำเข้า
npm ติดตั้งด่วน
สร้างเซิร์ฟเวอร์.js
เพิ่มคำสั่ง start เป็น node backend/server.js
ต้องการด่วน
สร้างเส้นทางสำหรับ / กลับแบ็กเอนด์พร้อมแล้ว
ย้าย products.js จากส่วนหน้าไปยังส่วนหลัง
สร้างเส้นทางสำหรับ /api/products
คืนสินค้า
วิ่ง npm เริ่มต้น
โหลดผลิตภัณฑ์จากแบ็กเอนด์
แก้ไข HomeScreen.js
กำหนดผลิตภัณฑ์ การบรรทุก และข้อผิดพลาด
สร้าง useEffect
กำหนด async fetchData และเรียกมัน
ติดตั้ง axios
รับข้อมูลจาก /api/products
แสดงในรายการ
สร้างส่วนประกอบกำลังโหลด
สร้างส่วนประกอบกล่องข้อความ
ใช้ในหน้าจอหลัก
ติดตั้ง ESlint สำหรับ Code Linting
ติดตั้งส่วนขยาย VSCode eslint
การติดตั้ง npm -D eslint
รัน ./node_modules/.bin/eslint --init
สร้าง ./frontend/.env
เพิ่ม SKIP_PREFLIGHT_CHECK=true
เพิ่ม Redux ให้กับหน้าจอหลัก
npm ติดตั้ง redux react-redux
สร้าง store.js
initState= {ผลิตภัณฑ์:[]}
ตัวลด = (สถานะ, การกระทำ) => สวิตช์ LOAD_PRODUCTS: {ผลิตภัณฑ์: action.payload}
ส่งออกค่าเริ่มต้น createStore (ตัวลด, initState)
แก้ไข HomeScreen.js
shopName = useSelector (รัฐ => state.products)
const จัดส่ง = useDispatch()
useEffect(()=>จัดส่ง ({ประเภท: LOAD_PRODUCTS, เพย์โหลด: ข้อมูล})
เพิ่มร้านค้าใน index.js
เพิ่ม Redux ลงในหน้าจอผลิตภัณฑ์
สร้างค่าคงที่รายละเอียดผลิตภัณฑ์ การดำเนินการ และตัวลด
เพิ่มตัวลดลงใน store.js
ใช้การกระทำใน ProductScreen.js
เพิ่ม /api/product/:id ไปที่แบ็กเอนด์ api
จัดการปุ่มเพิ่มลงตะกร้า
จัดการการหยิบลงตะกร้าใน ProductScreen.js
สร้าง CartScreen.js
ใช้การดำเนินการเพิ่มลงในรถเข็น
สร้างค่าคงที่ การดำเนินการ และตัวลด addToCart
เพิ่มตัวลดลงใน store.js
ใช้การดำเนินการใน CartScreen.js
แสดงผล cartItems.length
สร้างหน้าจอรถเข็น
สร้าง 2 คอลัมน์สำหรับรายการในรถเข็นและการดำเนินการในรถเข็น
cartItems.length === 0 ? รถเข็นว่างเปล่า
แสดงรูปภาพสินค้า ชื่อ จำนวน และราคา
ดำเนินการต่อไปที่ปุ่มชำระเงิน
ใช้การดำเนินการลบออกจากรถเข็น
ใช้การดำเนินการลบออกจากรถเข็น
สร้างค่าคงที่ การดำเนินการ และตัวลดของ RemoveFromCart
เพิ่มตัวลดลงใน store.js
ใช้การดำเนินการใน CartScreen.js
สร้างผู้ใช้ตัวอย่างใน MongoDB
npm ติดตั้งพังพอน
เชื่อมต่อกับ mongodb
สร้าง config.js
npm ติดตั้ง dotenv
ส่งออก MONGODB_URL
สร้างโมเดล/userModel.js
สร้าง userSchema และ userModel
สร้างเส้นทางผู้ใช้
ข้อมูลตัวอย่างเมล็ดพันธุ์
สร้างผลิตภัณฑ์ตัวอย่างใน MongoDB
สร้างโมเดล/productModel.js
สร้าง productSchema และ productModel
สร้างเส้นทางผลิตภัณฑ์
ข้อมูลตัวอย่างเมล็ดพันธุ์
สร้างแบ็กเอนด์การลงชื่อเข้าใช้
สร้าง / ลงชื่อเข้าใช้ API
ตรวจสอบอีเมลและรหัสผ่าน
สร้างโทเค็น
ติดตั้งโทเค็นเว็บ json
ติดตั้ง dotenv
โทเค็นการส่งคืนและข้อมูล
ทดสอบโดยใช้บุรุษไปรษณีย์
ออกแบบหน้าจอลงชื่อเข้าใช้
สร้าง SigninScreen
แสดงผลฟิลด์อีเมลและรหัสผ่าน
สร้างค่าคงที่การลงชื่อเข้าใช้ การดำเนินการ และตัวลด
อัปเดตส่วนหัวตามการเข้าสู่ระบบของผู้ใช้
ใช้การดำเนินการ SignIn
สร้างค่าคงที่การลงชื่อเข้าใช้ การดำเนินการ และตัวลด
เพิ่มตัวลดลงใน store.js
ใช้การดำเนินการใน SigninScreen.js
สร้างหน้าจอลงทะเบียน
สร้าง API สำหรับ /api/users/register
ใส่ผู้ใช้ใหม่ลงในฐานข้อมูล
ส่งคืนข้อมูลผู้ใช้และโทเค็น
สร้าง RegisterScreen
เพิ่มฟิลด์
ฟิลด์สไตล์
เพิ่มหน้าจอใน App.js
สร้างการดำเนินการลงทะเบียนและตัวลด
ตรวจสอบความถูกต้องและสร้างผู้ใช้
สร้างหน้าจอการจัดส่งสินค้า
สร้างส่วนประกอบ CheckoutSteps.js
สร้างเขตข้อมูลการจัดส่ง
ใช้ค่าคงที่การขนส่ง การดำเนินการ และตัวลด
สร้างหน้าจอการชำระเงิน
สร้างช่องการชำระเงิน
ใช้ค่าคงที่การขนส่ง การดำเนินการ และตัวลด
ออกแบบหน้าจอสั่งซื้อ
ฟิลด์สรุปคำสั่งการออกแบบ
การดำเนินการสั่งการออกแบบ
สร้าง Place Order API
createOrder api
สร้าง orderModel
สร้างคำสั่งเราเตอร์
สร้างเส้นทางการโพสต์คำสั่งซื้อ
ใช้การดำเนินการ PlaceOrder
จัดการปุ่มสั่งซื้อคลิก
สร้างค่าคงที่ลำดับสถานที่ การดำเนินการ และตัวลด
สร้างหน้าจอการสั่งซื้อ
สร้าง api คำสั่งซื้อสำหรับ /api/orders/:id
สร้าง OrderScreen.js
จัดส่งการดำเนินการรายละเอียดคำสั่งซื้อใน useEffect
โหลดข้อมูลด้วย useSelector
แสดงข้อมูลเช่นหน้าจอสั่งซื้อ
สร้างรายละเอียดการสั่งซื้อคงที่ การกระทำ และลด
เพิ่มปุ่ม PayPal
รับรหัสลูกค้าจาก paypal
ตั้งเป็นไฟล์ .env
สร้างแบบฟอร์มเส้นทาง /api/paypal/clientId
สร้าง getPaypalClientID ใน api.js
เพิ่มสคริปต์การชำระเงิน paypal ใน OrderScreen.js
แสดงปุ่ม paypal
ดำเนินการชำระเงินตามคำสั่งซื้อ
อัปเดตคำสั่งซื้อหลังการชำระเงิน
สร้าง payOrder ใน api.js
สร้างเส้นทางสำหรับ /:id/pay ใน orderRouter.js
แสดงผลอีกครั้งหลังจากชำระเงินแล้ว
แสดงประวัติการสั่งซื้อ
สร้าง API คำสั่งซื้อของลูกค้า
สร้าง API สำหรับ getMyOrders
แสดงคำสั่งซื้อในหน้าจอโปรไฟล์
คำสั่งสไตล์
แสดงโปรไฟล์ผู้ใช้
สร้าง api รายละเอียดผู้ใช้
แสดงข้อมูลผู้ใช้
อัปเดตโปรไฟล์ผู้ใช้
สร้าง API การอัปเดตผู้ใช้
อัปเดตข้อมูลผู้ใช้
สร้างมุมมองผู้ดูแลระบบ
สร้างเมนูผู้ดูแลระบบ
สร้างมิดเดิลแวร์ผู้ดูแลระบบในแบ็กเอนด์
สร้างเส้นทางผู้ดูแลระบบในส่วนหน้า
รายการผลิตภัณฑ์
หน้าจอสร้างรายการสินค้า
เพิ่มตัวลดเพื่อจัดเก็บ
แสดงสินค้าบนหน้าจอ
สร้างผลิตภัณฑ์
สร้างสร้างผลิตภัณฑ์ API
สร้างปุ่มสร้างผลิตภัณฑ์
กำหนดผลิตภัณฑ์สร้างค่าคงที่ การกระทำ และตัวลด
ใช้การดำเนินการในหน้าจอรายการผลิตภัณฑ์
สร้างหน้าจอแก้ไขผลิตภัณฑ์
สร้างหน้าจอแก้ไข
กำหนดสถานะ
สร้างฟิลด์
โหลดรายละเอียดสินค้า
เพิ่มเส้นทาง
อัพเดทสินค้า
กำหนดอัพเดต API
กำหนดค่าคงที่การอัพเดตผลิตภัณฑ์ การดำเนินการ และตัวลด
ใช้การดำเนินการในหน้าจอแก้ไขผลิตภัณฑ์
อัปโหลดภาพผลิตภัณฑ์
npm ติดตั้งมัลติเตอร์
กำหนดเราเตอร์อัพโหลด
สร้างโฟลเดอร์อัพโหลด
จัดการส่วนหน้า
ลบผลิตภัณฑ์
สร้างลบ API ในแบ็กเอนด์
สร้างค่าคงที่การลบ การดำเนินการ และตัวลด
ใช้ในหน้าจอรายการสินค้า
รายการคำสั่งซื้อ
สร้าง API รายการคำสั่งซื้อ
สร้างหน้าจอรายการสั่งซื้อ
เพิ่มตัวลดเพื่อจัดเก็บ
แสดงสินค้าบนหน้าจอ
ลบคำสั่งซื้อ 2. สร้างการดำเนินการลบคำสั่งซื้อและตัวลด 3. เพิ่มการดำเนินการลบคำสั่งซื้อไปยังรายการคำสั่งซื้อ
ส่งออเดอร์
สร้างค่าคงที่ การดำเนินการ และตัวลดสำหรับการสั่งซื้อ
เพิ่มการดำเนินการส่งมอบคำสั่งซื้อไปยังหน้าจอรายละเอียดคำสั่งซื้อ
เผยแพร่ไปยัง Heroku
สร้างที่เก็บคอมไพล์
สร้างบัญชี heroku
ติดตั้ง Heroku CLI
เข้าสู่ระบบเฮโรกุ
แอป Heroku: สร้าง Amazona
แก้ไข package.json สำหรับบิลด์สคริปต์
สร้างโปรไฟล์
สร้างฐานข้อมูล mongodb atlas
ตั้งค่าการเชื่อมต่อฐานข้อมูลในตัวแปร heroku env
มุ่งมั่นและผลักดัน
รายชื่อผู้ใช้
สร้าง API สำหรับผู้ใช้รายการ
สร้างหน้าจอรายการผู้ใช้
สร้างรายละเอียดการสั่งซื้อคงที่ การกระทำ และลด
ลบผู้ใช้
สร้าง API สำหรับผู้ใช้ที่ถูกลบ
สร้างรายละเอียดการสั่งซื้อคงที่ การกระทำ และลด
ใช้การกระทำใน UserListScreen
แก้ไขผู้ใช้
สร้าง API สำหรับการอัพเดตผู้ใช้
สร้าง UI หน้าจอแก้ไข
ใช้มุมมองผู้ขาย
เพิ่มเมนูผู้ขาย
สร้างเส้นทางผู้ขาย
รายการสินค้าสำหรับผู้ขาย
รายการคำสั่งซื้อสำหรับผู้ขาย
เพิ่มผู้ขายลงในหน้าจอรายการสินค้าและรายละเอียด
สร้างหน้าผู้ขาย
สร้างหน้าผู้ขาย
อัพเดตส่วนประกอบของผลิตภัณฑ์และหน้าจอผลิตภัณฑ์
อัพเดตเส้นทางผลิตภัณฑ์
เพิ่มม้าหมุนผู้ขายสูงสุด
ติดตั้ง react carousel
ใช้การดำเนินการและตัวลดสำหรับผู้ขายชั้นนำ
ใช้วงล้อโต้ตอบกับข้อมูลในหน้าจอหลัก
บังคับสั่งซื้อสินค้าจากผู้ขายรายหนึ่ง
อัปเดตการดำเนินการ addToCart เพื่อซื้อจากผู้ขายรายหนึ่งตามคำสั่งซื้อ
สร้างช่องค้นหาและหน้าจอค้นหา
สร้างแถบค้นหาใน Header.js
เพิ่มสไตล์
จัดการส่งแบบฟอร์ม
แก้ไข parse url เพื่อรับสตริงการสืบค้น
อัปเดต API รายการผลิตภัณฑ์สำหรับการค้นหาตามชื่อ
เพิ่มตัวกรองการค้นหาขั้นสูง 1. กรองตามหมวดหมู่ 2. กรองตามช่วงราคา 3. กรองตามคะแนนเฉลี่ย
ทำการค้นหาขั้นสูงให้สมบูรณ์ 1. กรองตามราคา 2. กรองตามคะแนน 3. เรียงลำดับตามราคา, คะแนน, ...
ให้คะแนนและวิจารณ์ผลิตภัณฑ์ 1. ให้คะแนนผลิตภัณฑ์ 2. สร้างการดำเนินการและตัวลด
เลือกที่อยู่ใน Google Map 1. สร้างข้อมูลประจำตัวของ Google Map 2. อัปเดตไฟล์ .env ด้วย Google Api Key 3. สร้าง api เพื่อส่ง google api ไปยังส่วนหน้า 4. สร้างหน้าจอแผนที่ 5. ดึงข้อมูล google api 6. getUserLocation 7. ติดตั้ง @react- google-maps/api 8. ใช้ในหน้าจอการจัดส่ง 9. นำแผนที่ไปใช้กับหน้าจอชำระเงิน
BugFix: ทำงานภายในเครื่องโดยไม่มีปัญหา
เพิ่มข้อมูลผู้ขายลงใน data.js
ข้อมูลผลิตภัณฑ์เมล็ดพันธุ์พร้อมข้อมูลผู้ดูแลระบบในฐานะผู้ขาย
แก้ไข isSeller และ isAdmin ในการอัปเดตผู้ใช้
ลบการรับรองความถูกต้องออกจากรายละเอียดผู้ใช้
ดำเนินการแบ่งหน้า
เพิ่มการแบ่งหน้าให้กับเราเตอร์ผลิตภัณฑ์ในแบ็กเอนด์
ใช้หมายเลขหน้ากับการดำเนินการและตัวลดขนาดในส่วนหน้า
แสดงหมายเลขหน้าในหน้าจอค้นหา
ใบเสร็จการสั่งซื้อทางอีเมลโดย mailgun 1. สร้างบัญชี mailgun 2. เพิ่มและยืนยันโดเมนของคุณเป็น mailgun 3. ติดตั้ง mailgun-js 4. ตั้งค่าคีย์ api ในไฟล์ env 5. เปลี่ยนคำสั่งจ่ายเงินใน orderRouter 6. ส่งอีเมลไปที่
สร้างหน้าจอแดชบอร์ด
สร้างข้อมูลแผนภูมิในแบ็กเอนด์
หน้าจอสร้างแผนภูมิ
ใช้แชทสดกับลูกค้า
ใช้ socket io เพื่อสร้างแบ็กเอนด์
สร้างส่วนประกอบกล่องแชท
สร้างหน้าจอสนับสนุน
อัปเกรดเป็น React 17, เราเตอร์ 6, Mongoose 6
แบ็กเอนด์
ถอนการติดตั้งและติดตั้งแพ็คเกจทั้งหมด
ลบตัวเลือกในการเชื่อมต่อพังพอน
ห่อ mailgun ลองจับตามลำดับเราเตอร์
ส่วนหน้า
ถอนการติดตั้งและติดตั้งแพ็คเกจทั้งหมด
ลบในช่องค้นหา
ห่อทั้งหมดเข้า
แทนที่ด้วย <องค์ประกอบเส้นทาง={}>
แทนที่ด้วย <องค์ประกอบเส้นทาง={ }/>
แทนที่และด้วย
อัปเดต PrivateRoute, AdminRoute และ SellerRoute
แทนที่ push() ด้วย Navigate() จาก useNavigate
แทนที่ props.match.params.id ด้วย const params = useParams();
แทนที่ props.location.search ด้วย const { search } = useLocation(); และ URLSearchParams
แทนที่ props.match.path ด้วย const {pathname} = useLocation();
ใส่ userInfo ใน useEffect ใน ChatBox, SupportScreen