久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網運營的一線實戰(zhàn)洞察。

Node.js+Express+MySQL寵物用品購物網站開發(fā)實戰(zhàn):畢業(yè)設計完整指南

Node.js+Express+MySQL寵物用品購物網站開發(fā)實戰(zhàn):畢業(yè)設計完整指南 簡介這是基于Node.js、Express與MySQL構建的前后端分離寵物用品購物網站畢業(yè)設計源碼面向計算機專業(yè)畢業(yè)生、課程設計學生以及全棧開發(fā)入門者可完整學習后端服務搭建、數據庫設計、接口開發(fā)及前端交互的電商項目實踐。壓縮包共669個文件總大小12.02MB包含193個js邏輯文件路由、中間件、業(yè)務處理、39個vue頁面組件、51個css樣式、28個html頁面、1個sql數據庫腳本以及5個bat輔助啟動腳本并配有svg、gif、jpg、png等圖片素材、字體文件及Markdown說明文檔目錄結構完整解壓后可直接部署運行。目前已有95人學習下載適合作為畢業(yè)設計答辯、課程作業(yè)或商城項目原型參考。項目覆蓋商品瀏覽、購物車、訂單管理、用戶注冊登錄等核心業(yè)務模塊同時涉及Node.js異步編程、Express路由與中間件、MySQL數據持久化、RESTful API設計、JWT用戶認證、模板引擎渲染、JSON數據交互、支付接口預留以及測試部署思路等關鍵技術點并附帶啟動腳本和數據庫初始化文件幫助讀者系統掌握全棧開發(fā)流程便于快速上手和二次擴展。1. 畢業(yè)設計選「寵物用品購物網站」最怕的不是做不完而是做完講不清畢業(yè)設計選「寵物用品購物網站」這個題目最怕的不是功能做不完而是做完之后講不清楚里面的技術點?;?Node.js Express MySQL 的前后端分離實現恰好壓在一個很舒服的位置功能上有商品瀏覽、搜索、購物車、下單、訂單管理足夠支撐起一份完整的畢業(yè)設計或課程設計技術上沒有引入 Redis、消息隊列這類難講清楚的東西前后端之間的每一次數據交換都能畫出明確的流程圖。這套源碼不追求炫技它的價值在于讓你在兩周內復現出一個能跑、能截圖、能在答辯時講明白的電商閉環(huán)。正在找設計題目的同學或者想用 Node.js 棧做項目實踐的開發(fā)者都可以用它作為起點。2. 動手之前Node.js 版本、MySQL 8.0 初始化和建庫的完整細節(jié)2.1 為什么是 Node.js Express MySQL而不是 Spring Boot 或 PHP選擇技術棧的底層邏輯不是「哪個火選哪個」而是「答辯被追問時你有多大的把握解釋清楚」。Java Spring Boot 在畢業(yè)設計里確實主流但很多同學在答辯時會被問到「Spring 的 Bean 生命周期」「自動配置原理」這些問題對于只做了 CRUD 的人來說很難答好。PHP 寫起來快但簡歷和項目呈現上都顯得不夠新。Node.js Express 的優(yōu)勢是語言單一前端 Vue 用的是 JavaScript后端 Express 也是 JavaScript你只需要熟練一種語法就能打通前后端。從架構上講這套組合的請求鏈路非常板書友好Vue 頁面通過 axios 發(fā)起 HTTP 請求 → Express 路由層接收 → Controller 處理業(yè)務邏輯 → 通過 mysql2 查詢數據庫 → 返回 JSON 給前端渲染。每一步都有一個明確的「層」每一層都有對應的目錄和文件這在答辯畫架構圖時是天然分層的。而且 Express 的中間件機制是必考點——app.use(cors())、app.use(bodyParser.json())、app.use(/api/user, require(./routes/user))這三行代碼擺在黑板上就能把「洋蔥模型」「中間件執(zhí)行順序」這些概念串起來老師在這一點上通常愿意給高分。2.2 環(huán)境搭建Node.js 版本選擇以及 MySQL 免安裝版的血淚經歷先說版本結論。Node.js 裝 16 或 18 的 LTS 版本不要追新裝 20 以上的奇數版本。原因很現實源碼包里用到的某個依賴可能在最新版 Node 上有棄用警告雖然不影響運行但答辯演示時控制臺飄一堆警告也不太好看。MySQL 裝 8.0 系列別下載 5.7因為 8.0 對 utf8mb4 字符集、JSON 函數、窗口函數的支持更完整而且現在的教程、踩坑記錄基本都是針對 8.0 寫的遇到問題更容易搜到答案。Windows 上安裝 Node.js 沒什么好說的官網下載 LTS 版本一路 Next 即可。MySQL 才是重頭戲。如果你下載的是 zip 免安裝版會踩到整個項目里最麻煩的一個坑——沒有data目錄。第一次啟動net start mysql會直接失敗錯誤日志里寫Data Dictionary initialization failed。原因是免安裝版不會自動初始化數據目錄。我一般這樣處理# 以管理員身份打開命令行進入解壓后的 MySQL 目錄 # 初始化數據目錄這一步會在輸出日志里生成一個臨時 root 密碼 mysqld --initialize --console # 初始化完成后把 MySQL 注冊成 Windows 服務 mysqld --install MySQL # 啟動服務 net start MySQLmysqld --initialize --console這條命令會把初始化過程打印到控制臺其中有一行temporary password is generated后面跟著臨時密碼第一次登錄必須用它登錄后馬上改密碼。注意如果你執(zhí)行了mysqld --initialize卻沒記下臨時密碼那只能刪掉 data 目錄重新初始化沒有后悔藥。我從那以后每次初始化都把控制臺輸出截圖保存。驗證環(huán)境是否就緒node -v npm -v mysql -u root -p輸入密碼后能進入mysql提示符說明 Node 和 MySQL 兩個基礎環(huán)境都通了。這里有一個容易被忽略的細節(jié)mysql -u root -p后面千萬不要直接跟密碼比如-p123456命令行會提示 warning說密碼暴露在命令行里不安全。2.3 建庫建表字符集選 utf8mb4 而不是 utf8以及商品表結構設計登錄 MySQL 后建庫。建庫時字符集的選擇是第一個會實際踩到的坑CREATE DATABASE pet_shop DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE pet_shop; -- 用戶表 CREATE TABLE user ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL COMMENT 存的是 bcrypt 哈希不是明文, phone VARCHAR(20), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4; -- 商品表 CREATE TABLE product ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, category VARCHAR(50) NOT NULL COMMENT 貓糧、狗糧、玩具、日用品, price DECIMAL(10,2) NOT NULL, stock INT DEFAULT 0, image VARCHAR(255) COMMENT 商品主圖路徑, description TEXT COMMENT 詳情描述支持中文和表情符號 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;為什么用 utf8mb4 而不是 utf8因為 MySQL 的 utf8 實際最多存 3 字節(jié)字符而寵物用品詳情的文案里經常有 這類 emoji它們是 4 字節(jié)的。用 utf8 建表插入 emoji 會直接報錯Incorrect string value。這個坑早期我栽過一次后來建庫第一條命令就定死 utf8mb4。表結構設計上有一個值得在答辯時講的點price為什么用DECIMAL(10,2)而不是FLOAT。因為浮點數在 MySQL 里存儲會丟失精度比如 19.99 在 FLOAT 存儲后查出來可能是 19.989999。DECIMAL 是定點數按字符串存儲不會丟精度。購物網站的金額計算涉及錢精度問題在答辯時是必考加分項。提示源碼包自帶的pet_shop.sql里已經建好了全部表包括購物車表cart、訂單表orders、訂單明細表order_items。用mysql -u root -p pet_shop pet_shop.sql導入之前先確認數據庫字符集是 utf8mb4否則導入后表的中文會變成亂碼。3. Express 后端實現路由分層、JWT 登錄和商品分頁的邊界坑3.1 入口文件與目錄分層中間件注冊順序為什么不能亂拿到源碼包后先把后端目錄結構看清楚。這個項目的后端分層思路是標準的 Express 工程結構pet-shop-server/ ├─ app.js # Express 入口 ├─ config/ │ └─ db.js # MySQL 連接配置mysql2 ├─ routes/ │ ├─ user.js # 注冊、登錄路由 │ ├─ product.js # 商品列表、搜索、詳情路由 │ └─ order.js # 下單、訂單列表路由 ├─ controllers/ │ ├─ userController.js # 業(yè)務邏輯查庫、加密、簽發(fā) token │ ├─ productController.js │ └─ orderController.js ├─ middleware/ │ └─ auth.js # JWT 鑒權中間件 └─ package.jsonroutes 只負責定義 URL 路徑真正的邏輯在 controllers 里。這個分層習慣極其重要——如果所有代碼都寫在 app.js 里前期開發(fā)快但后期調試會非常痛苦。入口文件app.js的中間件注冊順序有一點講究const express require(express); const cors require(cors); const bodyParser require(body-parser); const app express(); // 中間件注冊順序CORS → bodyParser → 路由 → 404 兜底 app.use(cors()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.use(/api/user, require(./routes/user)); app.use(/api/product, require(./routes/product)); app.use(/api/order, require(./routes/order)); // 404 兜底必須放在所有路由之后 app.use((req, res) { res.status(404).json({ message: 接口不存在 }); }); app.listen(3000, () { console.log(server running at http://localhost:3000); });這段代碼里有三個細節(jié)要在答辯時能解釋。第一cors()必須放在最前面因為跨域校驗發(fā)生在請求進入業(yè)務處理之前如果寫成app.use(cors())之前還有別的中間件瀏覽器可能已經攔截了響應。第二bodyParser.urlencoded({ extended: true })不能省有些表單提交的 Content-Type 是application/x-www-form-urlencoded只配了json()解析器時請求體會變成空對象{}這是新手排查半天都找不到原因的經典問題。第三404 兜底路由必須在所有業(yè)務路由注冊之后否則它會先捕獲所有請求。3.2 用 JWT 做登錄鑒權token 里該放什么、過期時間該設多長前后端分離架構下登錄狀態(tài)不依賴 session因為前端和后端可能不在同一臺服務器上session 存在服務端內存里無法共享。標準做法是 JWT用戶登錄成功后后端用密鑰對用戶 id 簽名生成一個 token 返回給前端前端存到 localStorage每次請求在 Header 里帶Authorization: Bearer token。// middleware/auth.js const jwt require(jsonwebtoken); const SECRET pet-shop-secret-key; // 實際項目放 .env module.exports function auth(req, res, next) { const header req.headers.authorization; if (!header) { return res.status(401).json({ message: 未登錄請先登錄 }); } // 格式約定Bearer tokensplit 后取第二部分 const token header.split( )[1]; try { const payload jwt.verify(token, SECRET); req.userId payload.id; // 最關鍵把用戶 id 掛到 req 對象上后面的路由直接用 next(); } catch (err) { return res.status(401).json({ message: token 無效或已過期 }); } };這段代碼是鑒權中間件的標準模板。jwt.verify會同時校驗簽名和過期時間token 被篡改或過期都只會走到 catch 分支返回 401。登錄接口里簽發(fā) token 的邏輯// controllers/userController.js節(jié)選 const bcrypt require(bcryptjs); const jwt require(jsonwebtoken); const db require(../config/db); exports.login (req, res) { const { username, password } req.body; // 參數校驗空值直接返回 400不要在 SQL 層面兜 if (!username || !password) { return res.status(400).json({ message: 用戶名和密碼不能為空 }); } // 參數占位符 ? 防止 SQL 注入 db.query(SELECT * FROM user WHERE username ?, [username], (err, results) { if (err) return res.status(500).json({ message: 服務器內部錯誤 }); if (results.length 0) { return res.status(400).json({ message: 用戶不存在 }); } const user results[0]; // bcrypt.compareSync 返回布爾值 const isMatch bcrypt.compareSync(password, user.password); if (!isMatch) { return res.status(400).json({ message: 密碼錯誤 }); } // 簽發(fā) token有效期 7 天 const token jwt.sign( { id: user.id, username: user.username }, SECRET, { expiresIn: 7d } ); res.json({ token, username: user.username, message: 登錄成功 }); }); };JWT 的過期時間設 7 天這個選擇值得在答辯時解釋。管理后臺系統通常設 30 分鐘因為操作敏感電商前端用戶不可能每半小時重新登錄一次7 天是「安全性和用戶體驗的折中」。你能說出這個理由老師會覺得你不是隨便選了一個數字。另外注意bcrypt.compareSync是同步方法在真實高并發(fā)項目里應該用異步的bcrypt.compare但畢業(yè)設計里同步方法足夠而且答辯時可以主動提起「我知道有異步版本在高并發(fā)下性能更好」這是一個主動展示知識邊界的好機會。3.3 商品分頁接口total 計數、offset 計算、LIMIT 綁定商品列表是所有用戶都能訪問的接口不需要 token。分頁接口有兩個容易踩的坑源碼里已經處理好了但你需要知道原因。第一個坑是分頁偏移量的計算。前端傳page和pageSize后端算offset (page - 1) * pageSize。很多新手直接把page當 offset 用首頁能出數據翻到第二頁就重復了。第二個坑是 total 字段。分頁組件要算總頁數就必須知道總記錄數。所以接口返回里必須帶total否則前端只能靠「這頁是否還有數據」來猜測有沒有下一頁。源碼里的實現// controllers/productController.js節(jié)選 exports.list (req, res) { const page parseInt(req.query.page) || 1; const pageSize parseInt(req.query.pageSize) || 10; const category req.query.category || ; // 動態(tài)拼接 WHERE 條件前提是 category 不是用戶可隨意構造的復雜條件 let where ; const params []; if (category) { where WHERE category ?; params.push(category); } // 第一步查總數 db.query(SELECT COUNT(*) AS total FROM product ${where}, params, (err, countResult) { if (err) return res.status(500).json({ message: 查詢失敗 }); const total countResult[0].total; const offset (page - 1) * pageSize; // 注意mysql2 舊版本在 LIMIT 子句里用 ? 占位可能會有問題 // 所以這里直接拼接數字offset 和 pageSize 都已經通過 parseInt 轉成了整數 const sql SELECT * FROM product ${where} ORDER BY id DESC LIMIT ${offset}, ${pageSize}; db.query(sql, params, (err, rows) { if (err) return res.status(500).json({ message: 查詢失敗 }); res.json({ list: rows, total: total, page: page, pageSize: pageSize }); }); }); };關于 LIMIT 子句的占位符問題補充一句mysql2 驅動在 2.x 版本之后已經支持LIMIT ?, ?綁定如果你用的驅動版本較新可以寫成db.query(sql, [...params, offset, pageSize], cb)的形式。老驅動在 LIMIT 里用占位符可能直接報語法錯誤所以源碼里選擇直接拼接整數。這個細節(jié)在答辯時被問到時你可以回答「為了兼容 mysql2 舊版本的驅動行為offset 和 pageSize 經過 parseInt 后確認是整數再直接拼進 SQL不存在注入風險如果驅動版本支持占位符我會改成全綁定寫法。」4. 前端 Vue 對接axios 攔截器、購物車狀態(tài)和下單流程的先后順序4.1 前端目錄與 axios 封裝請求攔截器里自動帶 token前端部分源碼用的是 Vue 2 Element UI這套組合在畢業(yè)設計里極其常見。目錄結構如下pet-shop-web/ ├─ src/ │ ├─ api/ │ │ ├─ request.js # axios 實例 攔截器 │ │ ├─ product.js # 商品接口封裝 │ │ ├─ user.js # 登錄注冊封裝 │ │ └─ order.js # 訂單接口封裝 │ ├─ views/ │ │ ├─ Home.vue # 商品列表 │ │ ├─ Cart.vue # 購物車 │ │ ├─ Order.vue # 訂單確認 │ │ ├─ OrderList.vue # 訂單列表 │ │ └─ Login.vue # 登錄注冊 │ ├─ router/index.js │ └─ App.vue └─ package.jsonaxios 封裝是整個前端最值得寫的一段代碼。新手最容易犯的錯是在每個頁面里手動寫請求頭token 字段在十幾個文件里重復出現項目一大就失控。正確做法是在請求攔截器里統一注入// src/api/request.js import axios from axios; import router from ../router; // 創(chuàng)建 axios 實例 const request axios.create({ baseURL: http://localhost:3000/api, // 后端接口前綴 timeout: 10000 // 10 秒超時 }); // 請求攔截器在每次發(fā)請求前自動帶上 token request.interceptors.request.use(config { const token localStorage.getItem(token); if (token) { // 與后端 auth.js 里的約定一致Bearer token config.headers.Authorization Bearer ${token}; } return config; }); // 響應攔截器統一處理后端返回 request.interceptors.response.use( response response.data, // 直接拿到后端 JSON 的 data 部分 error { if (error.response error.response.status 401) { // token 失效清掉本地登錄態(tài)跳登錄頁 localStorage.removeItem(token); router.push(/login); } return Promise.reject(error); } ); export default request;封裝完成之后每個接口文件就非常薄。以api/product.js為例import request from ./request; // 商品列表page、pageSize、category 都是可選參數 export function getProductList(params) { return request.get(/product/list, { params }); } // 商品詳情 export function getProductDetail(id) { return request.get(/product/detail/${id}); }response response.data這一行作用是省去每個組件里都寫一層res.data.data的麻煩。封裝不好的項目里往往會出現res.data.data.data這種三層嵌套就是因為 axios 默認返回的 response 對象包了一層{ status, headers, data }。這里直接剝到業(yè)務數據層。4.2 購物車邏輯未登錄存 localStorage登錄后走后端接口購物車的設計是這個項目里一個很有區(qū)分度的點。它的設計是未登錄時購物車數據存在前端localStorage用戶登錄后購物車數據存 MySQL 的cart表。為什么要這么做因為用戶可能還沒登錄就開始逛加了幾件商品到購物車然后去登錄登錄完成后購物車里的商品不能丟。這個「合并購物車」的邏輯一定是在登錄接口成功的回調里執(zhí)行的。偽代碼如下// views/Login.vue 登錄成功的回調節(jié)選 async function handleLoginSuccess(token, username) { localStorage.setItem(token, token); // 1. 取出 localStorage 里未登錄時存的本地購物車 const localCart JSON.parse(localStorage.getItem(cart) || []); // 2. 本地的商品逐條加入后端購物車 for (const item of localCart) { await addToCart({ productId: item.productId, quantity: item.quantity }); } // 3. 合并完成后清空本地購物車 localStorage.removeItem(cart); // 4. 跳轉首頁 router.push(/); }這個流程的先后順序不能亂。如果先清空localStorage再合并后端購物車刷新頁面后購物車數據就丟了。如果你在答辯時把這個「先合并、后清空」的順序主動講出來老師會覺得你處理過真實場景的邊界問題。商品列表頁的加載邏輯相對簡單核心是在onMounted里調接口// views/Home.vue import { onMounted, ref } from vue; import { getProductList } from ../api/product; const list ref([]); const total ref(0); const page ref(1); const pageSize ref(8); async function loadData() { const res await getProductList({ page: page.value, pageSize: pageSize.value }); list.value res.list; total.value res.total; } onMounted(() { loadData(); });4.3 下單流程創(chuàng)建訂單主表、扣庫存、生成明細、清空購物車的順序提交訂單這一節(jié)值得多說兩句因為這里的坑非常典型。前端下單邏輯如果只調一個「createOrder」接口看起來簡單但擴展性差如果拆成四步又要面對「中間某一步失敗怎么回滾」的問題。源碼的做法是后端用 MySQL 事務把四個步驟包起來前端只調一個接口。但為了理解業(yè)務語義這里把四步拆開說明// controllers/orderController.js簡化示意真實代碼用事務包裹 exports.createOrder (req, res) { const { userId, address, items } req.body; db.beginTransaction(err { if (err) return res.status(500).json({ message: 事務開啟失敗 }); // 第一步創(chuàng)建訂單主表拿到訂單 id db.query(INSERT INTO orders (user_id, address, total_amount, status) VALUES (?, ?, ?, 0), [userId, address, items.reduce((sum, i) sum i.price * i.quantity, 0)], (err, result) { if (err) return db.rollback(() res.status(500).json({ message: 創(chuàng)建訂單失敗 })); const orderId result.insertId; // 第二步逐條扣庫存扣減前必須先查庫存是否充足 const updateStockPromises items.map(item { return new Promise((resolve, reject) { db.query( UPDATE product SET stock stock - ? WHERE id ? AND stock ?, [item.quantity, item.productId, item.quantity], (err, updateResult) { // affectedRows 0 說明庫存不足UPDATE 條件不滿足 if (updateResult.affectedRows 0) { reject(new Error(商品 ${item.productId} 庫存不足)); } else { resolve(); } } ); }); }); Promise.all(updateStockPromises).then(() { // 第三步批量插入訂單明細 const detailValues items.map(i [orderId, i.productId, i.quantity, i.price]); db.query(INSERT INTO order_items (order_id, product_id, quantity, price) VALUES ?, [detailValues], (err) { if (err) return db.rollback(() res.status(500).json({ message: 訂單明細寫入失敗 })); // 第四步清空用戶購物車 db.query(DELETE FROM cart WHERE user_id ?, [userId], (err) { if (err) return db.rollback(() res.status(500).json({ message: 清空購物車失敗 })); db.commit(err { if (err) return db.rollback(() res.status(500).json({ message: 事務提交失敗 })); res.json({ orderId, message: 訂單創(chuàng)建成功 }); }); }); }); }).catch(err { db.rollback(() res.status(500).json({ message: err.message })); }); }); }); };這段代碼的核心設計點是UPDATE product SET stock stock - ? WHERE id ? AND stock ?這條 SQL 自帶庫存檢查。如果在業(yè)務代碼里先查庫存再更新中間有并發(fā)請求插進來就會超賣把檢查放進 UPDATE 的 WHERE 條件里就是所謂「原子操作」數據庫引擎保證同一時間只有一條 SQL 在執(zhí)行。這是電商項目里防超賣的標準做法也是答辯時最亮眼的一個技術點。另外一個細節(jié)事務里任何一個步驟出錯前面所有已執(zhí)行的操作都要回滾否則會出現「訂單表有記錄但商品庫存沒減」的數據不一致。所以代碼里每個出錯分支都要調用db.rollback()。這個「要么全部成功要么全部失敗」的思想在答辯時是絕對的高頻考點。5. 避坑與常見問題排查環(huán)境權限、MySQL 啟動、跨域與亂碼5.1 npm 無法加載文件PowerShell 執(zhí)行策略限制的官方解法現象在 Windows PowerShell 里運行npm start報錯npm : 無法加載文件 C:\Program Files\nodejs\npm.ps1因為在此系統上禁止運行腳本。原因Windows PowerShell 的默認執(zhí)行策略是 Restricted禁止運行任何 .ps1 腳本而 npm 在 PowerShell 里的包裝命令恰好是npm.ps1。不是 npm 安裝壞了是系統安全策略攔住了。解決以管理員身份打開 PowerShell執(zhí)行# RemoteSigned允許本地腳本運行遠程下載的腳本必須帶簽名 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned輸出問詢時輸入Y確認。改完后退出 PowerShell 重新打開再執(zhí)行npm -v能返回版本號就說明問題解決了。這里要提示一句不要為了省事設成Unrestricted它會允許所有腳本運行有安全風險。5.2 MySQL 服務啟動失敗net start mysql 報錯或自動停止現象net start mysql提示服務正在啟動幾秒后報「服務無法啟動」或者服務列表里顯示運行中但端口沒監(jiān)聽。原因最常見的是免安裝版 MySQL 沒有初始化data目錄或者my.ini配置文件里的basedir和datadir路徑寫錯。服務啟動時找不到數據目錄直接退出。解決按照第 2.2 節(jié)提到的方法先刪除或確認data目錄不存在然后執(zhí)行# 重新初始化數據目錄 mysqld --initialize --console初始化完成后確認my.ini里datadir指向的是剛生成的 data 目錄路徑。路徑里如果有中文可能會出問題建議把 MySQL 放到純英文路徑下。還有一種情況是端口被占用——用netstat -ano | findstr 3306查看 3306 端口是否被其他進程占據常見沖突是之前在電腦上裝過 MariaDB 或者另一個 MySQL 服務。5.3 前端請求被 CORS 攔截Network 里能看到響應但 axios 拿不到數據現象前端跑在http://localhost:8080后端跑在http://localhost:3000瀏覽器控制臺報CORS policy錯誤Network 面板里看這次請求其實已經發(fā)出去了響應也回來了但 axios 的then里拿不到數據。原因跨域是瀏覽器的安全限制兩個地址「協議 域名 端口」三者有一個不同就是跨域。瀏覽器默認不允許頁面讀取跨域響應。解決在app.js里用了cors()中間件后響應頭里會加上Access-Control-Allow-Origin: *瀏覽器就不會攔截了。這里的關鍵是注冊順序app.use(cors())必須在掛載路由之前。如果你的后端沒引入 cors 包可以手動加響應頭app.use((req, res, next) { res.setHeader(Access-Control-Allow-Origin, *); res.setHeader(Access-Control-Allow-Headers, Content-Type, Authorization); res.setHeader(Access-Control-Allow-Methods, GET, POST, PUT, DELETE); if (req.method OPTIONS) { return res.sendStatus(204); } next(); });OPTIONS請求是瀏覽器在正式請求之前發(fā)送的「預檢」請求后端必須正確處理否則正式請求根本不會發(fā)出。前端如果使用了Authorization頭Access-Control-Allow-Headers里必須包含Authorization否則登錄后的接口全部失效。5.4 數據庫中文亂碼顯示問號或顯示成不認識的符號現象商品名稱、用戶昵稱在頁面和 MySQL Workbench 里都顯示為???或亂碼。原因字符集鏈路里任何一環(huán)斷了都會亂碼。建庫用了 latin1、連接參數沒指定 charset、或者 SQL 文件導入時被轉碼這三者都可能。真正的問題往往出在連接串上——就算庫和表都是 utf8mb4如果 Node.js 連接 MySQL 時沒有指定字符集驅動默認可能用 latin1 和你通信。解決檢查config/db.js里的連接配置const mysql require(mysql2); const connection mysql.createConnection({ host: localhost, port: 3306, user: root, password: 你的密碼, database: pet_shop, charset: utf8mb4 // 必須顯式指定 }); module.exports connection;同時確認建庫語句里字符集是 utf8mb4。如果數據已經在數據庫里顯示亂碼改了配置也沒用因為那是已經存在的壞數據需要刪掉重插。所以我寫這篇筆記時強調第一步建庫就要把字符集固定后面的連接參數和創(chuàng)建表語句都統一用 utf8mb4亂碼問題根本不會出現。5.5 接口報 404 但路由看起來沒問題路徑拼寫和基礎前綴最容易出錯現象前端調http://localhost:3000/api/user/login返回 404但代碼里app.use(/api/user, require(./routes/user))和router.post(/login)都寫得沒錯。原因這類 404 幾乎都是路徑拼接問題——前端 baseURL 寫成了http://localhost:3000但后端路由掛了/api前綴最終請求拼成了http://localhost:3000/user/login。或者反過來baseURL 寫成了/api但后端沒有掛/api前綴。解決把 baseURL 和后端掛載路徑拼起來驗證一遍前端baseURL: http://localhost:3000/api后端app.use(/api/user)router.post(/login)最終請求路徑是/api/user/login。另外檢查路由文件里有沒有寫錯router.post(/login/)這種情況——Express 會忽略末尾斜杠但最好統一風格。排查路徑問題時打開瀏覽器的 Network 面板看實際發(fā)出的 URL 是哪一個對照后端路由表逐段核對。6. 上線前驗證一條完整業(yè)務鏈路走通以及一個值得試的進階部署項目跑通的標準不是頁面打開沒報錯而是「從注冊到下單」這條完整鏈路能走通。我建議你在自己電腦上嚴格執(zhí)行下面這份檢查清單每過一條畫一個勾全部通過再去考慮截圖和答辯材料。先用 Postman 或 Apifox 按順序測后端接口順序操作預期結果1POST/api/user/register提交用戶名和密碼user 表新增一條記錄密碼字段是一長串 bcrypt 哈希2POST/api/user/login提交相同密碼返回token字段登錄成功3GET/api/product/list不帶 token正常返回商品列表和 total4POST/api/order/create不帶 token返回 401提示未登錄5POST/api/order/create帶Authorization: Bearer token返回 orderIdproduct 表對應商品庫存減少第 3 步和第 4 步是對照組用來驗證「瀏覽商品不需要登錄、下單必須登錄」的權限設計。如果第 4 步沒有攔下來說明auth中間件沒掛到訂單路由上回去檢查routes/order.js里router.use(auth)的位置。再走前端驗證流程注冊賬號 → 登錄確認 token 寫入 localStorage→ 瀏覽商品 → 切換分類篩選 → 加入購物車 → 購物車頁改數量 → 提交訂單 → 在訂單列表頁看到剛下的單。這八步全部走通項目功能層面就算驗收合格。如果你有多余時間我建議試一個進階玩法把后端部署到一臺云服務器前端打包后丟到 Nginx 里用proxy_pass把/api路徑轉發(fā)到 3000 端口的 Node 服務。這一步如果做成了簡歷上「獨立完成項目部署」這一欄就能理直氣壯地打鉤。核心配置只有一段server { listen 80; server_name your-domain.com; # 前端靜態(tài)文件 root /var/www/pet-shop-web/dist; location / { try_files $uri $uri/ /index.html; } # 把 /api 開頭的請求轉發(fā)給 Node.js location /api { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }這段配置解決了「前后端分離部署」的核心問題瀏覽器訪問 Nginx 拿到靜態(tài)頁面頁面里的請求指向同源的/api路徑Nginx 再轉發(fā)給 Node 服務。這樣前端和后端的地址統一了也順手解決了跨域問題。我自己每次拿到一份源碼包第一件事永遠不是讀代碼而是先跑通。跑通之后再拆結構拆完結構再改一個功能點驗證自己是否真的理解了。從那以后我每次接到項目都強制自己先「跑一遍完整鏈路再做任何修改」。因為你永遠不知道這個源碼包在你的電腦上會栽在哪個版本的坑里——PowerShell 執(zhí)行策略、MySQL 臨時密碼、CORS 預檢請求每個人翻車的位置都不一樣。希望這篇筆記能幫你在答辯前少走幾個彎路把時間花在真正值得講清楚的技術點上。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
男人天堂日日夜夜| 成人精品视频| 国产欧美日韩精品中文| 综合色好色| 任我爽在线视频免费观看| 91大学精品激情戏| 午夜寂寞欧美| 欧美操逼熟女| 青青操网| 亚洲精品国产熟女久久久| 岛国艾薇凹凸视频天堂| 天天干天天操天天操夜夜操天天操 | 欧美情色贴图| 97香焦色区| 久久肏大逼| 亚洲伊人久久综合97| 四虎在线免费视频| 久久中文色图| 国产视频三区四区| 天天拍天天操| 狠狠色婷婷777| 一本一道波多野毛片中文在线| 日躁天天爽爽| 精品美女少妇一区二区| 亚洲狠狠入| 一牛一区二区三区久久| 精品97久久综合| 91天天日| 精品少妇一区二区三区免费观看| 久久久久久AV无码免费网站| 无码天天操| 亚洲精品久久久久毛片A片拉屎| 后入式999| 国产诱惑| 老熟女综合网 | 亚洲日产专区婷婷| 欧美成人色| 欧美色图片91| 久久久久无码一妻区| 日韩精品操少妇| 日日夜夜噜| 亚洲中文电影| 久久久久久99999国产精品| 加勒比AV网| 少妇三P| 久草精品一区| 久久久性少妇| 亚洲综合网91| 日韩肏逼视频| 懂色中文一区二区三区| 午夜男人av| 亚洲一区二区中文字幕| 色综合99| 欲色影视综合吧| 东北女人被操| 日夜尻逼网| 97在线亚洲| 国产免费内射视频| 91在线免费精品视频| 日本操逼视频在线| 精品一区二区成人| a在线观看| 91欧美高清| 美美91成人国产精品欧美精品久久久久久久 | 亚洲精品一区中文字幕乱码| 厕所偷拍在线| 91黑丝操| 欧美色涩| 国产懂色精品国产av| 日韩欧美亚洲一区二区三区影院| 看日韩美女二区三区免费操逼视频| 国产少妇肉丝在线观看| 国产熟女| 亚洲丝袜诱惑| a v网站在线播放| 蜜桃久久一区二区三区| 国产嫩草精品A88AV在线| 伊人伊人LD| 色与欲影视天天看综合网| 97天天操| 嗯啊抽插大香蕉网页| 国产精品视频白浆免费| 亚洲情色电影网| 精品九九九九九九九九九| 熟妇无码视频三区| 成人精品在线免费视频| 再深点灬舒服灬太大了好硬好爽| 国产美女91视频| 超碰97资源网亚洲| 全免费a敌肛交毛片免费| 国产欧美伊人| 亚洲性天堂| 少妇一区二区三区高速| 亚 欧 美 综合| 动漫av中文| 欧美亚洲天堂| 亚洲精品久久久久久久久豆丁网| 精品久久久久久久| 天堂网 主播 亚洲| 色综合av综合久久| 一区黄二区黄| 啪啪综合网| 天堂种子在线www网资源| 欧美亚洲第1页| 婷婷午夜清品久久久久久久性色视频观| 成人无码在线超碰网| 亚洲无码99| 精品无码产区一区二| 人人玩人人添人人澡免费| 六九九九| 精品久9| 自拍视频一区在线观看| 国产高清在线自在拍69| 乱伦图一区| 91成人在线| 欧美岛国精品在线观看| 高清不卡一二三区视频......| 久久青娱乐| 亚洲性爱无码乱伦av| 97欧美精品综合| 9118禁| 97超级久久强资源| 久久人| 啪啪一区| 高颜值美女口爆高潮浪叫| 国产成人bd在线观看| 91高潮喷水美女| 亚洲图片婷婷五月天| 久久111| 凹凸视频在线一区二区| 啊啊啊啊二区好大| 370p日韩欧美亚洲精品| 久久久久久久久久久久黄色| 丝袜人妻av一区二区| 人人妻人人操人人乐| 久草资源在线| 亚洲drav色图| 婷婷久久网| 亚洲影视综合| 日韩美女,国产传媒,视频一区| 亚洲天堂一区二区久久| 91男人天堂网| 亚洲人妻AV| 啊啊啊操死我| 男人干美女| 插穴性爱视频在线观看| 9久久久久久| 久碰视频| 人人妻人人爽 97人人看碰人免费公开视频| 东京热一区二区三区四区五区六区| 日韩成人无码| 日夜干射色啊| 狠狠干综合| 久久精品—区二区三区内射| 美女主播色欲91抠b在线播放| 国产精品视频一区二区三区八戒| 亚洲午夜精品久久久中文影院| 啪啪一区| 69少妇一区二区| 亚洲欧美视| 九九伊人网| 秋霞色色影院| 亚洲欲| 综合一区中亚洲国产成人综合精品 | 国产av激情无码久久天堂| 伊人网在线视频| 综合自拍| 99视频这有这里有精品| 国产麻豆91欧美一区二区久久婷婷国产精品| 六月婷激情福利天堂69| 久久一区二区三区入口| 亚洲情色欧美| 情色五月天就去干| 大香蕉天天看妹子| 激情综合97| 丁香六月东京热| 亚洲欧美黄| 国产精品在线一区二区| 人妻精品4K4K4K4K4| 日本3级一区二区免费| 亚洲欧美色图小说| 992视频一区| 丰满搜索结果 -第18页- 久久高清无码| 亚洲欧洲日韩国产自在线| 欧美97爱| 日韩精品人妻中文字幕不卡乱码| 美女大乳久久久久久久女人18| 91动漫操逼视频| V A在线| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 白嫩91在线亚洲| 色鬼在线综合| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 大香蕉手机视频| 韩国手机不卡无码三级视频| 亚洲āv网址在线观看| 亚洲激情视频| 人人妻人人爽一区二区三区| 一区二区三区四区五区久久久久久| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美色偷偷| 91成人无码| 精品超碰色| 天天天操天天天爱| 伊人九九九| 女人18精品一区二区三区| 国产乱码久久久久久| 亚洲AV无码久久精品蜜桃小说| 91九久| 四虎 精品 WWW| 丁香五月天堂网| 亚洲欧美日韩综合在线尤物| 色综合网1| 操逼视频免费日韩无码| 天堂8在线新版官网| 色婷婷一区二区三区久久午夜| 男人综合网| 亚洲诱惑| 午夜欧美女人操逼| 天天92av| 91精品久久久久久| 亚洲色图美腿丝袜| 日本岛国黄色网址| 成年女人黄网站| 翔田千里A片一区二区| 亚av顶级裸体一区二区三区四区五区| 五月天婷婷基地| 欧美性爱免费短视频| 亚洲熟女av中文字幕| 色拍偷亚洲| 久久曰曰| 一区| 亚洲丝袜B诱惑| 天天干美少妇一区| 免费看一级a性色生活片久久无| 久操精品| 天天看天天综合成人网| 久久久久久精品免费看A级| 人妻干天天| 97干在线视频| 久久久久白虎| 免费在线观看国内色片网站网址| AA丁香综合激情| 天天干天天日天天射黄色片| 久久久久久久久久久久黄色 | 99综合视频一体| 97高清啪啪| 久久视频,这里只有精品| 不卡一区二区日本视频| 蜜桃狠狠色伊人亚洲综合 | 亚洲人妻中文在线视频| 久久视频,这里只有精品| 国产精品无码论坛| 91超碰碰在线| 最新的亚洲无吗| www.91视频网| 91少妇通奸网站| 婷婷五月天补不补| 亚洲最新av无码成人精品区| 老熟乱一区二区三区四区| 男人的天堂2010| 国产91乱伦| 欧美亚性天堂| 亚洲成人贴图| 狠狠做深爱婷婷久久二区| 五月婷婷综合网| 中文字幕一区二区三区高清| 伊香蕉综合久久久久久久噜噜噜| 九九热精彩视频| 亚洲操人| 久久草草亚洲蜜桃臀| 91白嫩| Julia在线播放亚洲久久| 青草草免费网站av| 999精品久久久久久久| 亚洲色图欧美色图综合| 国产中文字幕在线| 后入福利视频| 青青草好吊| 少妇特黄一区二区三区| 欧美综合在线第一页| 逼逼逼逼操操操操操操操操操午夜剧场| 啊啊啊啊免费视频| 精品国产乱码久久久久久蜜臀| 极品肉射| 亚欧高清| av亚欧| 久操视频在线观看| 欧美人妻一区| 色综合色色| 夜夜操天| 色69大色97香蕉| 骚女高跟AV在线| 亚州中文字幕超碰97| 亚洲日本天堂| 96精品久久久久久久久久| 自拍偷拍国产欧美日韩韩| 午夜AV人气不卡| 婷婷激情五月天小说网| 91精品91久久久中77777| 免费的av网| 一区二区不卡| 性色亚洲| 国模少妇一区二区三区| 夜夜肏2021| 国产熟妇一区二区| 丁香五月影院| 欧洲中文字幕| 久久精品一区二区| 超碰九九| 1204金沙人妻懂旧版免费| 人人操人人射人人干| 欧美性高潮| 色欲天天综合久久久无码网中文| 操逼无码操逼| 日韩另类色图| av橘色网站| 男人天堂黄片| 夜夜爽爽夜夜精品视频| 影视综合无码少妇| 少妇毛片久久| 超碰色老头| 狠狠操天天干| 91色欧美| 中文字幕日本久久| 亚洲国产精品无码AV久久| 成人aⅴ一区二区三区| 暖暖精品二区三区观看| 91网站18+| 亚洲成人性爱网站在线播放| 91暧暧| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久乐| 亚洲天堂日本| 人人操人人操人人人操| 69人妻精品丰满熟女区| 性爱乱伦网址| 一区二区三| 久九干| 日韩日本欧美在线观看| 欧洲亚洲人妻无码中字久久三区四区| 男女无套 免费网站| 色五月大香蕉| 水多多映视AV| 色色色日本| 少妇99| 中文字幕 国产 精品| 日韩不卡一二三四| 中文字幕老熟妇黄色视频| 中文字幕熟女人妻丝袜| 加勒比海成人视频网| 久色网| 91精品久久久久五月天精品| 在线电影亚洲色图| 欧美激情片一区二区| 天天情欲宗合网| 性性欧美| 少妇高潮99p| 欧美一区二区三区蜜桃| 内射小黄片| 精品人妻一区二区视频| av日韩中文字幕| 国产美女精品| 亚洲综合色网| 人人色人人射人人妻| 国产无马av| 最新三级网址| 国产无吗在线播放| 黄色成人网久久久久久| 一级性爱网| 亚洲αv一区二区三区| 青青草导航在线视频| 玖玖资源中文字幕制服丝袜| 18禁久极品美女久久哦哟呀!| 四季AV综合网址| 91偷拍欧美亚洲| 99精品丰满人妻无| 五月天伊人| 亚洲精品国产AV天美传媒| 性色一线| 色诱中文字幕| 91女网站| 噜噜噜亚洲精品| 偷拍综合亚洲| 欧美精品系列| 超碰在线人妻中文字幕| 2020中文在线一区二区三区| 美女黄频a美女大全免费皮| 99热在线观看| 人人妻人人操人人乐| 这里有精品| 岛国AV一区二区电影| 欧美国产成人在线| 1024精品在线| 人妻aa| 91 综合 色| 四虎视频在线观看| 国产熟女自拍| 97日韩欧美| 亚洲欧洲日韩国产自在线| 色色色色综合网| 久久久久久性爱视频| 粉嫩AV输入| 久草这里只有精品 | 97在线资源| 国产精品久久| 91五月天| julia国产在线| 偷拍偷窥与盗摄视频专区| 激情五月天社区| 69精品人人人人| 国产精品噜噜噜日日日| 性爱综合一区二区| 人妻熟女字幕一区二区| 少妇特黄一区二区三区| 91色碰| 国产一区在线看| 国产一区在线播放| 蜜乳AV色欲AVAV无码| 日韩 人妻 精品| 欧美碰碰综合色| 欧美疯狂做爰xxxx| 久久久久久久久国产| 日本成人A片免费看| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 综合亚洲欧美精品日韩?v| 床上啊啊啊一区二区三区| 天美传媒婬乱在| 亚洲色图大香| 乱伦熟妇一区二区| 国产成自自拍在线观看| 欧美性爱日韩性爱| 骚货 中文字幕 av| 2020中文字幕| 琪琪精品免费一区二区三区| 中文字幕AV片| 91精品丝袜在线观看| 大香蕉中文在线| 日韩pv中文| 91小视频| 一级性爱网| 精品人妻1区| 日本日逼高清| 深爱激情五月天| 蜜臀久久久久久999| 偷拍片久久| 大奶的诱惑| 美女国产一区二区久久| 丰满人妻一区二区三区在线| 理论久久婷婷网8| 蜜乳视频网站| 综合色图区| 97网址97| 国产福利小视频高清在线观看| 天天爽天天爽| 97精品久久久久中文字幕| 九九九九九精品视频| 无码外流操逼视频| 亚洲一二三四区机械| 日日摸日日弄日日拍| 成人性爱AV在线免费观看| 99这里有精品| 熟妇色99| www.天天干| 黄色十八禁| 亚洲欧洲成人在线电影| 禁止观看美女黄| 一本色道熟妇| av凤凰久久久| 情色五月天就去干| 欧美日韩午夜精品一区二区三区 | 亚洲最大黄网| 青青草好吊色| 国产又粗又又黄又猛| 好一吊区二区| 啪啪资源网| 日韩不卡码| 人人操肉肉| 欧洲乱码一区二区| 内射小黄片| 97超碰色屌| 日韩黄片视频试看| 91爱做| 亚洲一卡二卡在线免费| 色眯眯射| 久久亚洲AV成人精品无码| 亚州综合AⅤ| 99久久精品国产系列| 亚洲熟妇自偷自拍另欧美| 97人人爱人人乐| 懂色综合久久久| 东北女人操逼| 情色五月天久久久| 黄页网站免费高清在线观看| 一本色道久久综合亚洲二区三区| 久久美女福利是上海美女| 舔人妻中文免费视频| 午夜一区| 思思热在线视频免费| 欧美日韩人人精品| 国产精品久久久久久久久久梁医生| 久久国产精品91| 美女久久久久久久久久久| 亚洲熟女乱色| 韩国一级婬片A片无码天美| 日本淫穴在线| 久久91视频| 亚爽爽爽爽爽爽爽爽| 日日躁夜夜躁狠狠躁超爽| 2024黄色视频| 男人 天堂 日 亚洲| 乱伦av国产| 神马久久久久久久久| 香一区二区三区| 97精品熟女少妇一区| 日韩综合色网| 久无码| 午夜精品久久久久久久99蜜桃一| 99超碰网| 麻豆久久久久久久久丝袜| 欧美性生活免费网| 欧美亚州综合网图片| 欧美伦乱爱| 婷婷激情综合网| 五码视频在线观看| 青女偷拍网| 一区二区三区 丝袜高跟| 粉嫩绯色AV一区二区在线| 伊人超碰97| 精品无码一区二区| 婷婷九月色| 免费av在线播放二区| 九九九国产精品| 无码99| 影音先锋视频在线| 黄片www视频免费| 暴力av在线| 五月天久久婷婷亚洲| 欧洲熟妇xxXx欧美老妇裸体| 黄色电影在线播放综合网站| 欧美成人一级麻豆| 亚洲综合色图欧美| 都市激情人妻一区二区青青操视频 | 久久九九一区二区三区成人| 人人操人人狠狠操| 久久精品国产AV一区二区三区| 日韩91网| 怡春院久久| 97超碰超欧美。| 国产欧美一区二区| 婷婷五月天成人网| 牛牛aV| 激情综合网五月婷婷五月天| 亚洲 无码 偷拍| 激情综合 婷婷五月 红杏| 青青欧美| 久草毛片电影怡| 中文久久一区| 欧美少妇第一页| 极品五月天噜噜| 丁香五月影院| 日韩欧美麻豆大片| 嗯嗯啊在线视频| 欧美成人精品A片免费一区99| 精品一区二区亚洲国产| 在线精品福利免费播放| 一区二区三区黄片免费观看| 国产精品麻豆免费视频| 亚洲精品无码久久AV| 岛国在线免费视频| 国产精品永久免费10000| 啪啪啪亚欧美视频| PMv在线观看| 农村女一级毛卡片| 超碰精品日韩欧美国产| 两性色网| 五月丁香| 国产黄a三级三级三级av在线看 | 国产一区二区视频在线播放| 333kkkk·亚洲com久久| 午夜色婷婷| 激情综合色| 亚洲精品色| 啊啊啊啊啊啊在线看| 久久久久久91香蕉国产| 另类av综合久久| 久草精品一区| 亚州熟妇精品| 欧美激情内射| 国产高清自拍视频| 国产成人无码a| 我要去看2个日本美女.com曹逼 | 99超碰色| 爱啪精品一区| 99精品丰满人妻| 日韩中文字幕宗合在线| 91精品丝袜久久久久久| 欧美宗合色| 日本视频在线中文字幕| 欧美精品成人在线播放| 日韩精品一二三四| 亚洲永久永久永久永久一级一级一级精品 | 天堂网亚洲区手机版| 亚洲熟女人妻中文字幕一区二区| 人人爱人人乐人人操| 日本欧美韩国国产在线| 操逼逼无码| 志村玲子视频一区二区| 国产精品一区二区后入| 992视频一区| 99热这里只有精品8| 任你艹| 亚洲 欧美 小说| 岛国成人av在线播放网址| 婷婷色婷婷| 极品尤物在线观看| 亚洲暴力强奸AV| 国产日韩精品suv| 久久久久国产一区二| 玖玖人人爱| 91国产丝袜美女| 欧美成人A√在线一区二区| 中文字幕成人理论在线| 久九干| 精品久久久久成人码免| 免费的黄片有限公司| 亚洲成熟国产精品美女| 久草综合京东| 人妻天天爽夜夜爽2| 国产精品视频内谢女人| 亚洲丝袜二区| 亚洲日本大香蕉1| www.99色| 色眯眯射| 啊啊啊啊好多水| 日韩性爱电影一区| 欧美黑人猛交春色影视大全| 尤物视频新赏网鲜网色诱网| 黄色大片免费在线| 射 色综合| 色综合91好| 日本国产成人亚洲精品无码| www被窝色com| 97日韩欧美| 97中文天堂| 黑人黄片在线免费观看| 久久精品视频28| 国产精品视频内谢女人| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 精品免费视频国产一区| 婷婷操逼| 国产丰满熟夫69mpp| 色综合一区二区三区| 大鸡巴久久久| 一起草视频在线| 国产精品老熟女一区二区| 91av一区二区在线观看| 高清国产性猛交xxxx乱大交| 日韩伦理久 久久 清纯| 精品999一区二区| 欧美性爱在线无码| 欧美后入式| 日韩乱伦视频| 91精品国产91熟女| 久久丁香| 亚洲熟女av中文字幕| 久久免费精彩视频| 天天操天天舔| 日韩精品国产精品五码一区二区| 亚洲黄色| 天美av在线观看| 日韩人妻丝袜中文字幕| 日韩AV一起草| 91精品网站| 欧美日韩高潮喷水91| 天天色欧美| 99re不伦| 女人 A一级| 99蜜月精品久久| 动漫爆乳3D奶水一区在线观看| 怡红院网站在线视频| 亚洲制服欧美另类内射| 少妇天堂| 亚洲少妇诱惑| 97在线视频观看网站| 嗯嗯啊啊用力视频免费| 超碰成人公开| 欧美色图自拍| 天美国产精品| av无码av无码专区| 青青青在线高清视频在线一二三四区| 欧美一级三级| 一级特黄aaa大片在线观看成人一级片在线观看| 麻豆天美国美国产| 亚洲一曲日韩精品| 亚洲丝袜少妇在线| 青青操在线亚洲视频观看欧美在线 | 天天日日日射| 国产午夜无码片在线观看影视| 中文字幕视频二区| 精品人妻一区二区三区视频| 九九色热| 1人人看人人摸人人操| 国产又粗又长的视频| 伊人综合色网| h4610国产人妻| 丁香九月婷婷| julia中文字幕在线观看| 亚洲色综合| 91九色蝌蚪在线观看| 久久九九97| 亚洲限制级| 五月天黄色av| 天天插天天操| 亚洲国产成人福利在线观看| 97色碰| 久久久九九| 久久久久久性爱片| 91丨九色丨大屁股| 中文字幕五月婷婷免费| 中文字幕第7页| 麻豆国产第一| 国产青一二三| 久久草大香蕉| 国产激情片在线观看| 日本操逼视频不卡直接放| 久久国产精品一区二区| 蜜臀AV成人精品蜜臀AV久久| 97爱爱爱综合| 人妻AV在线| 久久精品国产亚洲AV高级北京| 影音先锋乱伦资源| 亚洲情色欧美| 久久久久99精品成人片蜜臀| 91精品国| 久久久久久久9最新免费视频观看| 国产视频三区四区| 96精品在线| 婷婷色影院| 日韩乱中文| 亚洲最大成人a毛毛片| 亚洲黄色视频在线观看视频| 久久久久久久精| 99热这里只有精品18| 综合亚洲网| 亚洲AV人人澡人人爱| 欧美综合色综合| 熟妇高潮精品一区二区三区下载| 肥臀熟女福利视频一区二区| 日韩AV一区二区三区三州三州| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 天天日天天插| 91操操| 丁香五月婷婷基地| 五月激情小说| 五月丁香激情综合| 中文字幕成人| 美女91网址| 玖玖超碰熟| 午夜九九| 国产一级内射高清视频| 99人妻| 免费操逼91| 第四色奇米影视777| 100啪啪视频大全| 日韩熟女无码| 中文字幕交换人妻| 911粉嫩人妻| 黄网在线播放| 日韩伦理视频| 最新av在线| 嗯嗯啊中文字幕| 欧美美女在线高潮999| 妇人噜噜| 人人操人人射人人干| 久久久精品九| 精品人妻一区二区免费看| 国产在线激情| 精精品人妻一区二区三区| 国产精品网址| 国产成年精品高清在线观看91| 深夜国产一区二区三区在线看| 亚洲超碰AV| 91狠婷| 日韩在线97| 蜜臀无码一区二区| 九九九九久久久久| 亚洲无码超碰免费| 国产成人精品无码久久| 五月婷婷激情综合| 久久超碰亚洲人| 伊人精品国产| 成人线上超碰| 日韩欧美aⅴ综合网站发布| 国产亚洲精品玖玖玖在线观看| 91丝袜在线观看| 日本精品性生活久久久| 久久天天摸| 欧美性暴力猛交XXXX| 大香蕉92| 91综合色| 午夜男人一级A片7777| 亚洲天堂中文字幕无码男同| 久久只有精品一区二区三区| 日韩欧美天堂| a片久久久久久久久久久久 | 一本色道久久综合亚洲二区三区| 国产成人在线观看网址| 国产欧美日韩精品中文| 久久手机好看网站| 深夜国产福利| 思思性爱| 欧洲乱码视频| 欧美一级在线观看成人| 多乙久久久久久| 偷窥自拍亚洲色图| 99re欧美| 欧美一级黄色18片免费看| 麻豆精品A片免费观看| 九九九偷拍| 超碰精品国产无码| 最新加勒比丝袜在线| 另类成人首页一区| 免费?级毛片无码?∨蜜芽试看| 久久伊人在线五区| 色原狠狠天天天| 97超碰色| 丝袜制服字幕在线| 亚洲做性| 精品国产丝袜一区二区三区乱码| 欧美午夜精品久久久久久超碰| 我爱搞逼综合网| 欧美日韩国产另类综合| 精品人妻一区二区三区四区| 亚州免费啪啪视频| 久久综合精品一区二区三区| 精品在线蜜臀| 丁香五月影院| 日本精品一区二区不卡| 曰韩精品九九无码| 欧美BT 亚洲色图| 9999免费精彩视频| rion磁力链接| 婷婷久久网| 亚洲美女精品九九视频| 嗯啊不要啊在线 | 91色爽欧美| 在线播放成人高清免费视频| 台湾佬中文娱乐自偷自拍| 亚洲熟女av中文字幕| 亚洲中文制服诱惑| 91青青草| 亚洲欧美综合网| 亚欧操逼片在线观看| 天天日天天干天天色| 亚洲中文制服诱惑| 久久αⅴ| 东北女人av| 亚洲综合欧美| 亚洲欧洲精品成人| 东京热视频网| AV丝袜少妇| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 国产精品情侣啪啪| 国产偷人伦激情在线观看| 精品久久久av| 天天干人人干天天日97| 青青草久久在线| 蜜乳AV色欲AVAV无码| 国产精品久久泡妞网站| 超碰97起碰| 日韩欧美大力操| 好屌色综合| 一区二区三区欧美激情| 亚洲天堂男人天堂| 精品国产99| 人人透人人操| 啊啊啊无码| 97免费视频网| 大香蕉久| 国内偷拍精品一区二区| 国产第11页| 四虎影院成年人片| 熟女人妻一区二区三区| 又摸又舔在线观看网站| 亚洲av影院在线观看| 嗯嗯啊啊好爽| 青青欧洲黑| 婷婷伊人网| 人妻少妇被猛烈进入中| 999久久久久久久久| 五月天伊人| 欧美性爱系列| 亚洲影院成人| 久夜操| 色哟哟AⅤ| 夜夜爽夜夜摸夜夜操免费视频| 超碰99在线观看| 亚洲欧美色图小说| 亚洲天天天| 国精综合一二三区影视| 丁香六月婷| 国产精品久久久久久久电影渣男| 夜夜嗨老熟女AV一区二区三区| 亚洲人成色9999精品久久 | 人妻精品一区二区在线| 性爱网站一区二区| 超碰欧美COM| 亚洲揄拍网| 婷婷国产精品九区| 日韩乱插| 天天天天天天天天天天干美女| 人妻夜夜爽天天爽三区麻豆AV网站| 密臀AV在线| 人夜夜精品网站香蕉嫩草| 亚洲无吗在线视频| 国产精品日韩在线一区| 夜夜躁狠狠躁日日躁av| 伊人宅男大香蕉| 99re这里| 女优视频第10页| 立川理惠被中出无码| 无码少妇精品一区二区60岁老人| 久草成人福利导航| 国产日韩欧美| 丁香五月天啪啪| A 在线网址| 精品综合久久久久久五月天| 日本97久久| Aa东京男人的天堂| 禁十八久久| 91国产大片| 91xingse| 精彩视频日韩| 激情综合五月天| 精品偷拍13p欧美dodk视频| 天堂v无码免费视频| 日韩欧美麻豆| 玖玖爱视频网站| 日韩电影中文字幕| 农村少妇久久久久久久| 久久精品女同亚洲女同13| 蜜臀亚洲中文| 1204av韩国| 神马久久久久久久久久久久| 亚州春色| 色娱乐色呦呦夜夜夜夜av| 久啪| 欧美性爱一区二区三区四区| 久啪| 亚洲欧美国产va在线| 欧美大片天天看| 91网站18+| 亚欧美综合| 久操免费观看| 91亚州| 亚洲精品毛片在线观看| 午夜视频好爽啊| 国模少妇一区二区三区| 大香蕉黄色一区| 18禁网站在线播放| 亚洲AV无码国产精品久久久久| 亚洲黄网在哪免费看| 久久久久免费少妇| 久久25| 成年人免费观看网站| 夜夜国自区| 男人天堂网站| 影音先锋日本乱伦| 天堂中文日本在线观看| 亚欧性爱ab| 久久国产精品91| 亚洲少妇色图自慰直播| 国产精品高朝久久久久久久| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | av2014 日韩在线中文字幕| 97国产精品一区| 午夜福利1区2区3区| 极品尤物自安慰| 欧美色图天堂在线| 天天看人人操屄犊摸阴| 久久精品女同亚洲女同13| 亚洲三级。日韩三级| 欧美性爱18观看| 国产AV无码AV| 九九久久久九九| 青青草狠狠撸| 久久久久亚洲Av无码专区老牛影视| 少妇高潮流水av免费| 国产精品无码在线| 国产天天骚| 老司机午夜精品福利视频一区二区| 日韩猛交| 另类图片五月| 最新中文字幕av| 精品丰满熟妇人妻一区| 三级日本一区二区三区| 黄片com.| 亚洲国产剧情少妇激情| 乱久久久| 凹凸视频在线一区二区| 综合欧美日韩在线观看| 日韩女模中文造逼| 97天天综合网| 欧美91网站| 国产精品视频内谢女人| 午夜国产成人福利视频| 激情亚洲天堂| 欧美激情 亚洲色图| 男人高清无码一区二区| 伊人天堂在线| 狠狠入| 少妇3P性爱自拍| 一区久久久二区| 欧美三四五区| 色色色天美视频| 久久综合乱子伦国产免费| 高颜值美女口爆高潮浪叫| 国产精品无码成人精品| 日韩欧美视频青青| 国产人妻精品一区二区三区秋霞 | 日韩免费三级黄片电影| 男人兔费天堂| 精品成人久久久人人亚洲| 国产亚洲性生活视频播放| 午夜久久一区二区无码中出| 丝袜美腿丝袜| 91一区二区三区蜜桃| 精品性爱无码在线播放| 99re在线视频国产| 亚洲九九九九| 日本91白丝| 欧美日韩中文字幕不卡| 国产自偷自拍一区| 欧美 亚洲 91| 一区二区视频在线播放| 精品久久久久久久久久久久| 澳门黄片一香蕉视频| 天天干天天日天天射黄色| 综合欧美亚洲| 99精品在线| 精品亚洲天堂| 丁香婷婷色五月| 久久春色| 天天插天天插| 久久夜夜| 久久久中文| 91久久婷婷| 精品久久久久av影院| www.av不卡中文字幕| 乱伦一二三区| 欧美日韩性爱无码| 99精品综合久久久久五月天| 日韩一级二级三级免费看完整版| 91成人亚洲色图| 91成人18| 国产日韩在线播放| 人人操人人插人www| 天天草天天日| 操91| 肉丝网站91| 熟妇熟女视频一区二区三区| 九九RE视频在线精品| 极品欧美一区二区三区| 国产兽交视频在线播放| 国内精品a| 国产91乱伦| 你懂的在线观看区国产| 91精品女厕偷拍视频| 亚洲aV性爱| 婷婷丁香六月| 视频黄色国产一级| 精品超碰国产| 欧美在线色| 日韩欧美大片免费高清啪啪| 美日韩一卡二卡三卡免费人妻精品| 亚洲AV成人无码一二三久久| 加勒比伊人影院| 99啪啪视频| av亚欧| 欧美在线视频观看一二三四区高清| 国产操逼逼网| 亚洲不雅视频1区二区| 麻豆天美国美国产| 婷婷av在线中文字幕| 日夜久久久九九九久| 国产精品岛国片在线观看| 97超碰站| 亚洲男人的天堂网| 日本三级韩国三级99| 日韩操啪| 久久9999 | 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 免费观看性欧美一级| 国产精品3| www.狠狠干.coom | 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 亚洲精品日韩国产欧美| 中文字幕免费看| 中文字幕老熟妇黄色视频| 日本日逼高清| 久热这里只有精品9| 97碰碰日本乱偷人妻中文的| 色色婷| 多毛小伙内射老太婆| 1024精品在线| 欧美青青草视频| 啊啊啊啊啊啊啊国| 精品一区二区亚洲国产| 亚洲天堂久久久久久粉红视频| 亚洲在钱| 人妻久久久| 午夜影美女日鸡鸡天天视频国产| 亚洲色天| 天操天操夜操夜月月年年操操| 欧美图片色综合| 亚洲天堂久久| 日本一级性爱| 伊人网青青| 97视频在线| 久久精品国产97欧美精品亚洲| 99精品丰满人妻| 丁香六月综合激情| 亚洲av影院在线观看| 日本操逼无码| 久久激情婷婷| 九九九九精品视频| 91色人| 五月婷婷青青草娱乐伊人| 欧美一区二区日韩传媒搭讪精品| 射 色综合| 亚洲污污网站| 黄色二级片网站| 色婷婷99| 九九亚洲| 久久肏大逼| 免费看国产曰批40分钟怎么下载| 久久综合97| 日韩无码第3页| 亚洲偷拍欧美激情| 亚洲精品黑丝| 国产色产精品在线观看| 欧洲精品二区| 天天综合青苹果| 中文字幕熟女人妻丝袜丝| 色综合1991| 91欧美丨精品丨入口| 日韩美女高潮喷水视频| 一直超碰| 啊啊啊在线观看免费视频| 一区二区三区四区五区高清无码永久视频| 99热这里是精品| 丁香五月影院| 色爱国产| 天天流夜夜操| 3p国产欧美99热| 九九色精品| 七久久久| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 欧美日本国产日韩激情视频|