日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Egg.js框架的简单使用

發布時間:2023/12/9 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Egg.js框架的简单使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

創建

??創建項目文件夾,在文件下打開cmd:

npm init egg --type=simple npm install npm run dev

靜態文件目錄

app/public
??創建html文件

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><h1>我是靜態網頁</h1> </body> </html>

訪問:

控制器和路由

  • 直接響應數據或者渲染模板
  • 接受用戶的輸入
  • 與路由建立對應關系
    ??this.ctx可以獲取到當前請求的上下文對象,通過此對象可以便捷的獲取到請求與響應的屬性與方法。
  • 創建控制器

    app/controller下創建js文件:
    fruits.js

    'use strict'; // *嚴格模式const Controller = require('egg').Controller; class FruitsController extends Controller {async index() {const { ctx } = this;ctx.body = '列表';} } module.exports = FruitsController;

    添加路由

    app/router.js 添加要訪問的路由

    'use strict';/*** @param {Egg.Application} app - egg application*/ module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);router.get('/fruits', controller.fruits.index); //添加fruits路由 };

    路由傳參

    query

    fruits.js

    'use strict'; // *嚴格模式const Controller = require('egg').Controller; class FruitsController extends Controller {async index() {const { ctx } = this;const index = ctx.request.body;console.log(index)ctx.body = '列表';} } module.exports = FruitsController;

    訪問:

    打印:

    params

    app/router.js

    'use strict';/*** @param {Egg.Application} app - egg application*/ module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);router.get('/fruits', controller.fruits.index); //添加fruits路由router.get('/fruits/:id', controller.fruits.getId); };

    fruits.js

    'use strict'; // *嚴格模式const Controller = require('egg').Controller; class FruitsController extends Controller {async index() {const { ctx } = this;const index = ctx.request.body;console.log(index)ctx.body = '列表';}async getId() {const { ctx } = this;const id = ctx.params.id;console.log(id);ctx.body = `<h1 style='color:red;'>傳遞的id值是${id}</h1>`;} } module.exports = FruitsController;

    訪問:

    打印:

    POST請求

    ??上面介紹的params和query是GET請求方式,下面講一下POST請求:
    獲取post請求的參數:this.ctx.request.body

    CSRF

    ??CSRF是指跨站請求偽造,Egg中對post請求做了一些安全驗證,可以在config\config.default.js文件中設置驗證:

    /* eslint valid-jsdoc: "off" */'use strict';/*** @param {Egg.EggAppInfo} appInfo app info*/ module.exports = appInfo => {/*** built-in config* @type {Egg.EggAppConfig}**/const config = exports = {};// use for cookie sign key, should change to your own and keep securityconfig.keys = appInfo.name + '_1620442177015_7667';// add your middleware config hereconfig.middleware = [];// add your user config hereconst userConfig = {// myAppName: 'egg',};//post驗證config.security = {csrf: {enable: false,},};return {...config,...userConfig,}; };

    RESTful風格的URL定義

    ??restful風格的url可以簡化路由文件

    router.resources('posts','/api/posts',controller.posts); //一個方法同時定義增刪改查 MethodsPathRouter NameController.Action
    GET/postspostsapp.controllers.posts.index
    GET/posts/newnew_postsapp.controllers.posts.new
    GET/posts/:idpostapp.controllers.posts.show
    GET/posts/:id/editedit _postapp.controllers.posts.edit
    POST/postspostsapp.controllers.posts.create
    PUT/posts/:idpostapp.controllers.posts.update
    DELETE/posts/:idpostapp.controllers.posts.destroy

    demo:
    app\router.js

    'use strict';/*** @param {Egg.Application} app - egg application*/ module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);// !很繁瑣// router.get('/fruits', controller.fruits.index);// router.get('/fruits/:id', controller.fruits.getId);// router.get('/createfruit', controller.fruits.createPage);// router.post('/createfruit', controller.fruits.createFruit);// * RESTful風格的URL定義router.resources('fruits', '/fruits', controller.fruits); };

    app\controller\fruits.js

    'use strict'; // *嚴格模式const Controller = require('egg').Controller; let fruitList = [ '香蕉', '蘋果', '橘子' ];class FruitsController extends Controller {// ? /fruits get請求async index() {// this.ctx; // ?上下文對象const { ctx } = this;ctx.body = fruitList;}async new() {const { ctx } = this;ctx.body = `<form method='post' action='/fruits'><input name='fruitsName' type='text'/><button>添加</button></form>`;}// ? postasync create() {const { ctx } = this;const fruit = ctx.request.body.fruit;fruitList.push(fruit);// ctx.body = '添加成功';// ?跳轉到fruits頁面,實現get請求// *重定向ctx.redirect('/fruits');}// ?deleteasync destroy() {const { ctx } = this;const id = ctx.params.id;fruitList.splice(id, 1);ctx.body = '刪除成功';}}module.exports = FruitsController;

    Egg插件

    numjucks模板插件

    安裝:

    npm install --save egg-view-nunjucks

    配置:
    在config\plugin.js中引入:

    'use strict';/** @type Egg.EggPlugin */ module.exports = {// had enabled by egg// static: {// enable: true,// }nunjucks: {enable: true,package: 'egg-view-nunjucks',}, };

    在config\config.default.js中配置

    /* eslint valid-jsdoc: "off" */'use strict';/*** @param {Egg.EggAppInfo} appInfo app info*/ module.exports = appInfo => {/*** built-in config* @type {Egg.EggAppConfig}**/const config = exports = {};// use for cookie sign key, should change to your own and keep securityconfig.keys = appInfo.name + '_1620442177015_7667';// add your middleware config hereconfig.middleware = [];// add your user config hereconst userConfig = {// myAppName: 'egg',};config.security = {csrf: {enable: false,},};config.view = {defaultViewEngine: 'nunjucks',};return {...config,...userConfig,}; };

    在view目錄中創建模板文件,并在控制器中使用render方法渲染模板
    app\view\index.html

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><h1>nunjucks模板</h1> </body> </html> 'use strict';const Controller = require('egg').Controller;class HomeController extends Controller {async index() {const { ctx } = this;await ctx.render('index');} }module.exports = HomeController;

    跨域請求配置插件 egg-cors

    安裝:

    npm install --save egg-cors

    配置:
    在config\plugin.js中引入:

    'use strict';/** @type Egg.EggPlugin */ module.exports = {// had enabled by egg// static: {// enable: true,// }nunjucks: {enable: true,package: 'egg-view-nunjucks',},cors: {enable: true,package: 'egg-cors',}, };

    在config\config.default.js中配置

    /* eslint valid-jsdoc: "off" */'use strict';/*** @param {Egg.EggAppInfo} appInfo app info*/ module.exports = appInfo => {/*** built-in config* @type {Egg.EggAppConfig}**/const config = exports = {};// use for cookie sign key, should change to your own and keep securityconfig.keys = appInfo.name + '_1620442177015_7667';// add your middleware config hereconfig.middleware = [];// add your user config hereconst userConfig = {// myAppName: 'egg',};config.security = {csrf: {enable: false,},};config.view = {defaultViewEngine: 'nunjucks',};config.cors = {origin: '*',allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',};return {...config,...userConfig,}; };

    服務器如何識別用戶

    session識別用戶

    app\view\index.html

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </head> <body><h1>首頁</h1><form action="/logout" method="post"><button>注銷用戶</button></form> </body> </html>

    app\view\login.html

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>input{display: block;}</style> </head> <body><form action="/login" method="post"><label for="">賬號</label><input type="text" name="username" id=""><label for="">密碼</label><input type="password" name="password" id=""><button>登錄</button></form> </body> </html>

    app\controller\home.js

    'use strict';const Controller = require('egg').Controller;class HomeController extends Controller {async index() {const { ctx } = this;if (ctx.session.user) {await ctx.render('index');} else {ctx.redirect('/login');}}async getData() {const { ctx } = this;ctx.body = 'hello egg';}async login() {const { ctx } = this;await ctx.render('login');}async doLogin() {const { ctx } = this;const username = ctx.request.body.username;const password = ctx.request.body.password;if (username === 'mgd' && password === '123') {ctx.session.user = username;ctx.redirect('/');} else {ctx.redirect('/login');}}async logout() {const { ctx } = this;ctx.session.user = '';ctx.redirect('/login');} }module.exports = HomeController;

    app\router.js

    'use strict';/*** @param {Egg.Application} app - egg application*/ module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);router.get('/login', controller.home.login);router.post('/login', controller.home.doLogin);router.post('/logout', controller.home.logout); };

    JWT(Json Web Token)識別用戶

    安裝:

    npm install --save egg-jwt

    配置:
    在config\plugin.js中引入:

    'use strict';/** @type Egg.EggPlugin */ module.exports = {// had enabled by egg// static: {// enable: true,// }nunjucks: {enable: true,package: 'egg-view-nunjucks',},cors: {enable: true,package: 'egg-cors',},jwt: {enable: true,package: 'egg-jwt',}, };

    在config\config.default.js中配置

    /* eslint valid-jsdoc: "off" */'use strict';/*** @param {Egg.EggAppInfo} appInfo app info*/ module.exports = appInfo => {/*** built-in config* @type {Egg.EggAppConfig}**/const config = exports = {};// use for cookie sign key, should change to your own and keep securityconfig.keys = appInfo.name + '_1620442177015_7667';// add your middleware config hereconfig.middleware = [];// add your user config hereconst userConfig = {// myAppName: 'egg',};config.security = {csrf: {enable: false,},};config.view = {defaultViewEngine: 'nunjucks',};config.cors = {origin: '*',allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',};config.jwt = {secret: 'maguodong', //secret不能泄露};return {...config,...userConfig,}; };

    app\controller\jwt.js

    'use strict';const Controller = require('egg').Controller; class JwtController extends Controller {async index() {const { ctx } = this;const user = {username: 'mgd',};// ?egg-jwt引入后就可使用// ?用戶登錄const token = this.app.jwt.sign(user, this.app.config.jwt.secret);// ctx.body = token;try {const decode = this.app.jwt.verify(token, this.app.config.jwt.secret);ctx.body = decode;} catch (e) {ctx.body = 'token未能通過驗證';}}async doLogin() {const { ctx } = this;const user = ctx.request.body.user;if (user.username === 'mgd' && user.password === '123') {const user_jwt = { username: user.username };const token = this.app.jwt.sign(user_jwt, this.app.config.jwt.secret);ctx.body = {code: 200,token,};} else {ctx.body = {code: 400,msg: '用戶名或密碼錯誤',};}}async getMessage() {const { ctx } = this;ctx.body = 'hello jwt';} } module.exports = JwtController;

    app\router.js

    'use strict';/*** @param {Egg.Application} app - egg application*/ module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);router.get('/jwt', controller.jwt.index);router.post('/jwtlogin', controller.jwt.doLogin);router.get('/jwtmessage', controller.jwt.getMeaaage); };

    新建vue項目測試:
    Login.vue

    <template><h1>登錄</h1><form @submit.prevent="login"><label for="">賬號</label><input type="text" v-model="user.username"><label for="">密碼</label><input type="password" v-model="user.password"><button>登錄</button></form> </template><script> import { reactive, toRefs } from 'vue' import { useRouter } from 'vue-router'; import { doLogin } from '../server/loginServer.js' export default {setup () {const router = useRouter();const state = reactive({user:{username:'',password:''}})async function login(){await doLogin({user:state.user}).then(ret=>{console.log(ret); if(ret.data.code==200){localStorage.setItem('token',ret.data.token)console.log(ret.data.token);router.push("/")}})}return {...toRefs(state),login}} } </script><style lang="less" scoped></style>

    Home.vue

    <template><h1>首頁</h1><button @click="getMessage">獲取數據</button><button @click="logOut">注銷用戶</button><HelloWorld></HelloWorld> </template><script> import { reactive, toRefs } from 'vue' import { getData } from '../server/homeServer.js' import HelloWorld from '../components/HelloWorld.vue' export default {components:{HelloWorld},setup () {const state = reactive({count: 0,})async function getMessage() {let token = localStorage.getItem("token");await getData(null,{headers:{token}}).then(ret=>{console.log(ret);})}async function logOut() {localStorage.removeItem('token');location.reload()}return {...toRefs(state),getMessage,logOut,}} } </script><style lang="less" scoped></style>

    router.js

    import Home from '../view/Home.vue' import Login from '../view/Login.vue' import {createRouter, createWebHistory} from 'vue-router' const router = createRouter({history:createWebHistory(),routes:[{path:"/",component:Home,name:"home"},{path:"/login",component:Login,name:"login"},] }) router.beforeEach((to, from, next) => {if(to.path === '/login'){next()}else{if(localStorage.getItem('token')){next();}else{next('/login');}} }) export default router

    homeServer.js

    import http from '../Api/Api' const get = (url, params = {},header={}) =>http.get(url,params,header)const getData = (query={},header) => {get('jwtmessage',query,header) } export {getData, }

    loginServer.js

    import http from '../Api/Api' const post = (url, data = {}, isBody) =>http.post(url,data,isBody)const doLogin = query => post('jwtlogin',query)export {doLogin, }

    api.js

    import axios from "axios"; import qs from 'qs'; // 導入 NProgress 包對應的 css 與 js import NProgress from 'nprogress' import 'nprogress/nprogress.css' // import {getStorage} from '../utils/Storage.js'// axios.defaults.baseURL = 'https://oj.s001.xin/api' //正式 axios.defaults.baseURL = 'http://127.0.0.1:7001' //測試 //post請求頭 axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"; //設置超時 axios.defaults.timeout = 10000;axios.interceptors.request.use(config => {// console.log(config)NProgress.start()// config.headers.Authorization = window.sessionStorage.getItem('token')return config }) // 在 response 攔截器中,隱藏進度條 NProgress.done() axios.interceptors.response.use(config => {NProgress.done()return config })function post(url, data, isBody = true) {if (isBody) {axios.defaults.headers.post["Content-Type"] = 'application/json';} else {data = qs.stringify(data)}return new Promise((resolve, reject) => {axios({method: 'post',url,data}).then(res => {resolve(res)}).catch(err => {reject(err)});}) };function get(url, data, headers) {if(headers.headers){console.log(headers);axios.defaults.headers.get["token"] = headers.headers.token;}return new Promise((resolve, reject) => {axios({method: 'get',url,params: data,}).then(res => {resolve(res)}).catch(err => {reject(err)})}) };function put(url, data) {return new Promise((resolve, reject) => {axios({method: 'put',url,params: data,}).then(res => {resolve(res)}).catch(err => {reject(err)})}) };function deletes(url, data) {return new Promise((resolve, reject) => {axios({method: 'delete',url,params: data,}).then(res => {resolve(res)}).catch(err => {reject(err)})}) }; export default {post,get,put,deletes };

    中間件

    ??egg是一個基于koa的函數,中間件是一個函數,在請求與響應之間執行。

    在Egg中定義中間件

    app\middleware\checkToken.js

    'use strict'; function checkToken() {return async function(ctx, next) {try {// ?獲取tokenconst token = ctx.request.header.token;// ?校驗token// ?1.獲取app實例const decode = ctx.app.jwt.verify(token, ctx.app.config.jwt.secret);if (decode.username) {await next();} else {ctx.body = {code: 400,msg: '用戶校驗失敗',};}} catch (e) {ctx.body = {code: 400,msg: 'token校驗失敗',};}}; } module.exports = checkToken;

    執行中間件需要調用:
    app\router.js

    'use strict';/*** @param {Egg.Application} app - egg application*/ module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);router.get('/jwt', controller.jwt.index);router.post('/jwtlogin', controller.jwt.doLogin);// router.get('/jwtmessage', controller.jwt.getMeaaage);// ?添加中間件router.get('/jwtmessage', app.middleware.checkToken(), controller.jwt.getMeaaage); };

    數據持久化

    ORM

    對象關系映射(Object Relational Mapping 。簡稱ORM)

  • 將數據從對象的形式轉換成表格的形式
  • sequelzie是一個基于node的orm框架
  • 通過egg-sequelize,可以直接使用sequelize提供的方法操作數據庫,而不需要手動寫SQL語句
  • 安裝和使用sequelize

    步驟:

  • 下載:npm install --save egg-sequelize mysql2
  • 在plugin.js文件中引入插件
  • 在config.default.js文件中配置數據庫連接
  • 在app/model文件中創建數據模型
  • 添加app.js文件,初始化數據庫
    config\plugin.js
  • 'use strict';/** @type Egg.EggPlugin */ module.exports = {// had enabled by egg// static: {// enable: true,// }nunjucks: {enable: true,package: 'egg-view-nunjucks',},cors: {enable: true,package: 'egg-cors',},jwt: {enable: true,package: 'egg-jwt',},sequelize: {enable: true,package: 'egg-sequelize',},};

    config\config.default.js

    /* eslint valid-jsdoc: "off" */'use strict';/*** @param {Egg.EggAppInfo} appInfo app info*/ module.exports = appInfo => {/*** built-in config* @type {Egg.EggAppConfig}**/const config = exports = {};// use for cookie sign key, should change to your own and keep securityconfig.keys = appInfo.name + '_1620442177015_7667';// add your middleware config hereconfig.middleware = [];// add your user config hereconst userConfig = {// myAppName: 'egg',};config.security = {csrf: {enable: false,},};config.view = {defaultViewEngine: 'nunjucks',};config.cors = {origin: '*',allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',};config.jwt = {secret: 'maguodong',};config.sequelize = {dialect: 'mysql',database: 'eggdemo',host: '127.0.0.1',port: 3306,username: 'root',password: 'mgd12345',timezone: '+08:00',};return {...config,...userConfig,}; };

    app\model\clazz.js

    'use strict';module.exports = app => {const { STRING } = app.Sequelize;// ?默認情況下sequelize將自動將所有傳遞的模型名稱(define的第一個參數)抓換位復const Clazz = app.model.define('clazz', {// *自動生成idname: STRING,});return Clazz; }; // ?班級:id,name

    app.js

    'use strict'; module.exports = app => {// * beforeStart是egg生命周期函數,啟動應用時執行app.beforeStart(async function() {// await app.model.sync({ force: true }); // ?開發環境使用會刪除數據// *創建數據表的方法 sync會根據模型去創建表await app.model.sync({});}); };

    npm run dev啟動

    數據操作

    ??在controller中實現數據的增刪改查
    說明: 在真實項目中,controller和操作數據的邏輯要分離,以便于項目的擴展和維護

    this.app.model.Clazz.findAll(); //查詢數據 this.app.model.Clazz.findAll({where:{id:1}}); //通過where設置查詢條件 this.app.model.Clazz.create({name:'xxx'}); //添加數據 this.app.model.Clazz.update({name:'xxx'},{where:{id:1}}); //通過條件修改數據 this.app.model.Clazz.destroy({where:{id:1}}); //通過條件刪除數據

    app\controller\clazz.js

    'use strict';const Controller = require('egg').Controller; class ClazzController extends Controller {// ?restful接口 index/create/destroy/update// ?先不做異常處理async index() {const { ctx } = this;const clazzList = await this.app.model.Clazz.findAll();/* const id = ctx.request.query.id;const clazzList = await this.app.model.Clazz.findAll({where: {id,},}); */ctx.body = {code: 200,data: clazzList,};}async create() {const { ctx } = this;const name = ctx.request.body.name;await this.app.model.Clazz.create({name,});ctx.body = '添加成功';}async destroy() {const { ctx } = this;const id = ctx.params.id;await this.app.model.Clazz.destroy({where: {id,},});ctx.body = '刪除成功';}async update() {const { ctx } = this;const id = ctx.params.id;const name = ctx.request.body.name;await this.app.model.Clazz.update({ name }, {where: {id,},});ctx.body = '更新成功';} }module.exports = ClazzController;

    app\router.js

    'use strict';/*** @param {Egg.Application} app - egg application*/ module.exports = app => {const { router, controller } = app;router.get('/', controller.home.index);router.resources('clazz', '/clazz', controller.clazz); };

    添加外鍵

    app\model\student.js

    'use strict'; module.exports = app => {const { STRING, DOUBLE } = app.Sequelize;// ?默認情況下sequelize將自動將所有傳遞的模型名稱(define的第一個參數)抓換位復const Student = app.model.define('student', {// *自動生成idname: STRING,achievement: DOUBLE,});Student.associate = function() { // ?所屬哪個班級,指向班級的主鍵app.model.Student.belongsTo(app.model.Clazz, {foreignKey: 'clazz_id',as: 'clazz',});};return Student; };

    app\controller\student.js

    'use strict'; const Controller = require('egg').Controller;class StudentController extends Controller {async create() {const { ctx } = this;const name = ctx.request.body.name;const achievement = ctx.request.body.achievement;const clazz_id = ctx.request.body.clazz_id;await this.app.model.Student.create({name: names,achievement: achievements,clazz_id: clazzId,});ctx.body = '添加成功';}async index() {const { ctx } = this;const studentList = await this.app.model.Student.findAll();ctx.body = {code: 200,data: studentList,};}async update() {const { ctx } = this;const id = ctx.params.id;const name = ctx.request.body.name;const achievement = ctx.request.body.achievement;const clazzId = ctx.request.body.clazzId;await this.app.model.Student.update({ name, achievement, clazzId }, {where: {id,},});ctx.body = '更新成功';}async destroy() {const { ctx } = this;const id = ctx.params.id;await this.app.model.Student.destroy({where: {id,},});ctx.body = '刪除成功';} } module.exports = StudentController;

    Service(服務層)


    簡單來說,Service就是在復雜業務場景下用于做業務邏輯封裝的抽象層,提供這個抽象有一下幾個好處:

  • 保持Controller中的邏輯更加簡潔
  • 保持業務邏輯的獨立性,抽象出來的Servive可以被多個Controller重復調用
  • 定義servive

    app\service\student.js

    'use strict'; const Service = require('egg').Service;class StudentService extends Service {async getStudentList() {try {const studentList = await this.app.model.Student.findAll();return studentList;} catch (e) {return null;}}async createStudent(name, achievement, clazz_id) {try {await this.app.model.Student.create({name,achievement,clazz_id,});return true;} catch (e) {return false;}}async updateStudent(name, achievement, clazzId, id) {try {await this.app.model.Student.update({ name, achievement, clazzId }, {where: {id,},});return true;} catch (e) {return false;}}async deleteStudent(id) {try {await this.app.model.Student.destroy({where: {id,},});return true;} catch (e) {return false;}} }module.exports = StudentService;

    app\controller\student.js

    'use strict'; const Controller = require('egg').Controller;class StudentController extends Controller {async create() {const { ctx } = this;const name = ctx.request.body.name;const achievement = ctx.request.body.achievement;const clazz_id = ctx.request.body.clazz_id;/* await this.app.model.Student.create({name: names,achievement: achievements,clazz_id: clazzId,});ctx.body = '添加成功'; */// ?調用serviceconst result = await ctx.service.student.createStudent(name, achievement, clazz_id);if (result) {ctx.body = {code: 200,msg: '添加成功',};} else {ctx.body = {code: 500,msg: '數據添加失敗',};}}async index() {const { ctx } = this;/* const studentList = await this.app.model.Student.findAll();ctx.body = {code: 200,data: studentList,}; */// ?調用serviceconst list = await ctx.service.student.getStudentList();// const list = null;if (list) {ctx.body = {code: 200,data: list,};} else {ctx.body = {code: 500,msg: '服務器異常',};}}async update() {const { ctx } = this;const id = ctx.params.id;const name = ctx.request.body.name;const achievement = ctx.request.body.achievement;const clazzId = ctx.request.body.clazzId;// ?調用serviceconst update = await ctx.service.student.updateStudent(name, achievement, clazzId, id);if (update) {ctx.body = {code: 200,msg: '更新成功',};} else {ctx.body = {code: 400,msg: '更新失敗',};}}async destroy() {const { ctx } = this;const id = ctx.params.id;const destroy = await ctx.service.student.deleteStudent(id);if (destroy) {ctx.body = {code: 200,msg: '刪除成功',};} else {ctx.body = {code: 400,msg: '刪除失敗',};}} } module.exports = StudentController;

    部署

    前端打包好的項目會生成dist文件夾,將dist文件夾內的內容移動到egg項目下的app/public文件夾內。

    配置Egg的靜態文件訪問路徑

    config\config.default.js

    /* eslint valid-jsdoc: "off" */'use strict';/*** @param {Egg.EggAppInfo} appInfo app info*/ const path = require('path'); module.exports = appInfo => {/*** built-in config* @type {Egg.EggAppConfig}**/const config = exports = {};// use for cookie sign key, should change to your own and keep securityconfig.keys = appInfo.name + '_1620442177015_7667';// add your middleware config hereconfig.middleware = [];// add your user config hereconst userConfig = {// myAppName: 'egg',};config.security = {csrf: {enable: false,},};config.view = {defaultViewEngine: 'nunjucks',};config.cors = {origin: '*',allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH',};config.jwt = {secret: 'maguodong',};config.sequelize = {dialect: 'mysql',database: 'eggdemo',host: '127.0.0.1',port: 3306,username: 'root',password: 'mgd12345',timezone: '+08:00',};// ?配置Egg的靜態文件訪問路徑config.static = {prefix: '/',dir: path.join(appInfo.baseDir, 'app/public'),};return {...config,...userConfig,}; };

    啟動和關閉

    啟動:npm start 關閉:npm stop

    用ctrl+c不能停止服務

    總結

    以上是生活随笔為你收集整理的Egg.js框架的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    成人黄色电影在线播放 | 婷婷激情综合 | 九色91在线| 91精品综合在线观看 | 亚洲五月六月 | 日韩免费大片 | 国产成人精品综合 | 亚洲视频每日更新 | 精品亚洲一区二区 | 新版资源中文在线观看 | 国产破处视频在线播放 | 亚洲精品99久久久久中文字幕 | 97色视频在线 | 久久综合狠狠 | 玖玖玖影院 | 久热超碰| 国产午夜免费视频 | 丁香在线视频 | 在线观看黄色小视频 | 久草在线视频中文 | 欧美另类高潮 | 久久久久久麻豆 | 狠狠狠干 | 成 人 黄 色视频免费播放 | 日本精品久久久久影院 | 丁香六月网 | 国内揄拍国产精品 | 一区二区三区久久 | 欧洲黄色片 | 婷婷久久婷婷 | 国产一级片一区二区三区 | 久久激情五月婷婷 | 成人在线视频在线观看 | 五月婷婷操 | 欧美成人精品xxx | 一区二区视频在线看 | 久久视频二区 | 亚洲成人影音 | 麻豆视频免费网站 | 欧美aaa一级 | 麻豆首页 | 亚洲成av人片在线观看无 | 欧美另类色图 | 五月婷婷综合在线 | 国产精品午夜8888 | www国产亚洲精品久久麻豆 | 五月天婷亚洲天综合网精品偷 | 97免费在线观看视频 | 在线观看一区二区精品 | 日本久久精 | 九九视频精品免费 | 日韩久久网站 | 99久久精品午夜一区二区小说 | 成人av在线播放网站 | 亚洲精品男人天堂 | 亚洲免费不卡 | 超碰97久久 | 久久久高清一区二区三区 | 国产精国产精品 | 亚洲精选在线 | 二区三区在线 | 日韩亚洲欧美中文字幕 | av免费看在线 | 久久久亚洲电影 | 久草视频首页 | 在线成人小视频 | 99热99热 | 久久伊人精品天天 | 麻豆91在线看 | 视频在线播放国产 | 日韩中文字幕免费看 | av综合站| 欧美一级黄色视屏 | 99免费国产 | 少妇bbbb揉bbbb日本 | 亚洲国产一区在线观看 | 在线看岛国av | 在线观看国产一区 | 欧美激情综合色综合啪啪五月 | 日日摸日日添夜夜爽97 | a在线免费 | 九七视频在线观看 | 日本99干网 | 亚洲一区视频在线播放 | 国内99视频 | 亚洲综合国产精品 | 夜夜视频欧洲 | 国产视频在线免费 | 亚洲在线激情 | 成人午夜精品福利免费 | 欧美综合国产 | 黄av免费 | 97精品国产一二三产区 | 日韩在线电影一区二区 | 国产色女人| 制服丝袜亚洲 | 国产美女精品人人做人人爽 | 国产精品第7页 | 五月天免费网站 | 国产精品一区二区果冻传媒 | 欧美性极品xxxx娇小 | 欧美福利网站 | 午夜av免费在线观看 | 国产精品黄色影片导航在线观看 | 亚洲亚洲精品在线观看 | 日韩av片在线 | 国产精品欧美久久久久无广告 | 深夜免费福利 | 久草在线免费在线观看 | 国产亚洲成人网 | 日日夜夜草 | 天天干天天操天天射 | 亚洲午夜久久久影院 | 91人人爱| 综合色天天 | 综合色久 | 一区二区精品在线视频 | 天天摸天天舔 | 国产精品久久久久久久av大片 | 黄色三级在线看 | 色婷婷国产在线 | 日韩有码网站 | 国产123区在线观看 国产精品麻豆91 | 在线黄频 | 一本一道久久a久久综合蜜桃 | 又黄又爽免费视频 | 毛片永久免费 | 欧美伦理一区 | 91精品在线免费观看 | 国产精品久久久久久久久大全 | 久久99亚洲热视 | 久久综合色婷婷 | 日本99热 | 成片人卡1卡2卡3手机免费看 | 久久激情小视频 | 日本爱爱免费 | 成年人免费观看国产 | 久久精品国产精品亚洲 | 免费视频成人 | 国产精品一区二区av影院萌芽 | 亚洲免费婷婷 | 亚洲视频精选 | 24小时日本在线www免费的 | 国产爽视频| 久久免费大片 | 粉嫩一区二区三区粉嫩91 | 国产裸体bbb视频 | 伊人宗合| 天堂av色婷婷一区二区三区 | 国产免费不卡 | 99精品视频免费 | 色妞色视频一区二区三区四区 | 全久久久久久久久久久电影 | 最近中文字幕mv免费高清在线 | 超碰99人人 | 国产精品久久网站 | 婷婷色在线资源 | 国产免费又黄又爽 | 天天透天天插 | 亚洲人人射 | 亚洲欧美精品在线 | 丁香婷婷色 | 日本护士三级少妇三级999 | 亚洲综合小说电影qvod | 一区二区在线影院 | 国产尤物一区二区三区 | 四虎影视欧美 | 国产夫妻性生活自拍 | 亚洲一区二区精品视频 | 国产精品九九热 | av免费在线观看网站 | 免费av小说 | 日韩二区三区在线观看 | 少妇自拍av | 欧美精品中文在线免费观看 | 欧美成a人片在线观看久 | 国产又粗又猛又爽 | 欧美午夜久久 | 99久久一区 | 国产精品视频区 | 一区二区三区在线免费观看视频 | 丁香av在线| 久草影视在线观看 | 久久人人97超碰com | 欧美日韩一区二区久久 | 亚洲精品在线免费播放 | 久久国产视屏 | 在线观看www.| 看片的网址 | 日韩最新在线视频 | 久久久男人的天堂 | 午夜天使 | 欧美激情精品久久久久久变态 | 天天躁日日 | 成人久久久精品国产乱码一区二区 | 久久久国产精品麻豆 | 91大神免费在线观看 | 久久成人欧美 | 久久艹国产 | 国产在线一卡 | 婷婷色综合色 | 日韩精品影视 | 日b视频国产| 天天爱天天操天天射 | 四虎成人精品永久免费av九九 | 免费的黄色的网站 | 欧美一区免费在线观看 | 五月天色丁香 | 狠狠操操网 | 亚洲精品66 | 中文在线免费看视频 | av国产网站| 国产精品中文久久久久久久 | 超级碰碰碰碰 | 不卡中文字幕av | 高清精品在线 | 国产精品视频在线观看 | 日韩高清 一区 | 成人av免费播放 | 在线观看的av网站 | 久久久久亚洲精品成人网小说 | 最近免费中文视频 | 亚洲一区美女视频在线观看免费 | 免费国产一区二区视频 | 亚洲人视频在线 | 日韩在线视频网址 | 成人黄色小说在线观看 | 成人免费视频观看 | 丁香六月激情婷婷 | 免费男女羞羞的视频网站中文字幕 | 久草在线国产 | 亚洲欧美色婷婷 | 四虎8848免费高清在线观看 | 国产v欧美 | 亚洲欧洲精品一区二区 | 欧美另类v | 精品一区二区三区久久久 | 日韩国产精品一区 | 欧美激情综合网 | 视频在线观看91 | 99超碰在线观看 | 亚洲 欧洲 国产 日本 综合 | 天天操天天艹 | 中文字幕精品三级久久久 | 色中色综合 | 99在线精品视频在线观看 | 99国产精品 | 人人澡超碰碰97碰碰碰软件 | 国产精品专区在线观看 | 青青河边草免费 | 成人在线超碰 | 国产综合视频在线观看 | 精品黄色片 | 国产一区精品在线观看 | 免费在线成人av电影 | 日本福利视频在线 | www.av在线.com | 国产精品网在线观看 | 免费看的黄色网 | 99久e精品热线免费 99国产精品久久久久久久久久 | 天天爽天天搞 | 日韩一区二区在线免费观看 | 91成人精品一区在线播放69 | 九九久久免费视频 | 成年人在线看片 | 国产91学生粉嫩喷水 | 激情av网| 最新av电影网址 | 日韩肉感妇bbwbbwbbw | 久久久这里有精品 | 九色精品免费永久在线 | 欧美久久成人 | 在线看片视频 | 九九激情视频 | 免费黄色av. | 国产精品免费一区二区三区 | 亚洲国产精品视频在线观看 | 久久高清精品 | 亚洲高清视频在线播放 | 午夜婷婷网 | 久久久香蕉视频 | 91资源在线免费观看 | 五月天亚洲综合小说网 | 国产色中涩 | 日韩精品中文字幕在线 | 少妇18xxxx性xxxx片 | 久久久久高清 | 99在线精品免费视频九九视 | 国产精品男女视频 | 国产福利一区二区在线 | 九色精品免费永久在线 | 国产护士在线 | 毛片网在线| 五月亚洲综合 | 久久精品国产亚洲精品2020 | 97电影网站 | 91视频这里只有精品 | 精品一区二区三区四区在线 | 草久久影院 | 免费人成网ww44kk44 | 精品91在线 | 成人av观看 | 色婷五月天 | 在线成人中文字幕 | 日韩亚洲在线视频 | 一区二区三区精品在线视频 | 97超碰站| 天天干天天操天天入 | 一区二区三区中文字幕在线 | 在线亚洲观看 | 国产精品va在线观看入 | 国产日韩欧美在线看 | 四虎国产免费 | 毛片在线播放网址 | 91精品视频在线 | 91尤物在线播放 | 久久激情视频免费观看 | 91成人小视频 | 最近日本字幕mv免费观看在线 | 中文字幕丰满人伦在线 | 日本精品视频一区二区 | 亚洲国产欧洲综合997久久, | 久久精品国产免费看久久精品 | 欧洲精品码一区二区三区免费看 | 精品少妇一区二区三区在线 | 久久精品黄 | 国产成在线观看免费视频 | 成人va天堂| 日韩中文字幕免费 | 一区二区三区福利 | 久久伊人操 | 日韩精品中文字幕在线 | 最新91在线视频 | 亚洲国产片 | 在线国产激情视频 | 亚洲欧美成人在线 | 91精品1区2区 | 日韩大陆欧美高清视频区 | 美女免费视频网站 | 麻豆观看| 国产精品毛片一区二区在线 | 久久久久久久综合色一本 | 免费观看高清 | 亚洲国产成人精品在线 | 91视频免费看| 国产精品岛国久久久久久久久红粉 | 三级小视频在线观看 | 日韩在线视频观看免费 | 成人h电影在线观看 | 国产精品欧美久久久久久 | 国产 在线观看 | 欧美精品一区二区三区四区在线 | 中国一 片免费观看 | 91热视频| 久久精品香蕉 | 日韩视频免费 | 国产91精品一区二区麻豆亚洲 | 在线视频久 | 亚洲精品国产第一综合99久久 | 欧美日韩国产精品一区二区三区 | 中文字幕亚洲精品日韩 | 久久综合干 | 久久久免费观看视频 | 伊人手机在线 | 91久久奴性调教 | 最新国产视频 | 国产午夜亚洲精品 | 中文字幕久久亚洲 | 亚洲一区欧美激情 | 国产一区在线观看免费 | 一区二区中文字幕在线播放 | 久久久久99精品国产片 | 国产特级毛片aaaaaa毛片 | 精品嫩模福利一区二区蜜臀 | 在线观看国产福利片 | 亚洲国产精品人久久电影 | 永久免费的av电影 | 久久久久久久久久久免费 | 国产品久精国精产拍 | 亚洲a在线观看 | 中文免费在线观看 | 久久久久久久久久久久久久免费看 | 国产一区二区在线免费观看 | 美国av大片| 国产精品av免费在线观看 | 成人av资源网站 | 亚洲一级黄色片 | 激情五月综合网 | 91精品视屏 | 在线看免费 | 五月婷婷在线观看视频 | 欧美一级乱黄 | 日本中文字幕系列 | 亚洲天堂首页 | 97自拍超碰| 国产精品第三页 | 天天躁天天狠天天透 | 国产99久久精品 | avcom在线 | 国产麻豆剧果冻传媒视频播放量 | 国产中文字幕在线免费观看 | 久精品视频在线 | 亚洲一区免费在线 | 人人精久 | 日韩免费在线观看视频 | 欧美性生爱 | 丝袜美女在线观看 | 在线v片免费观看视频 | 麻花豆传媒一二三产区 | 91精品一区二区在线观看 | 日韩黄色大片在线观看 | 日韩在线三级 | 成人午夜在线观看 | 婷婷爱五月天 | 欧美另类美少妇69xxxx | 天天操天天玩 | 一区二区精品视频 | 久久在线观看 | 日日摸日日添日日躁av | 国产精品网址在线观看 | 在线观看视频三级 | 99久久精品免费看国产一区二区三区 | 精品久久久久久久久中文字幕 | 久久综合亚洲鲁鲁五月久久 | 丁香5月婷婷久久 | 国产精品九九九 | 国产亚洲无 | 97精品免费视频 | 免费一级片在线 | 国产视频一区在线播放 | 中文字幕视频在线播放 | 久久涩涩网站 | 国产男女无遮挡猛进猛出在线观看 | 91麻豆精品国产午夜天堂 | 五月婷婷综合在线观看 | 最近中文字幕高清字幕在线视频 | 在线看片91 | 黄色亚洲大片免费在线观看 | 国产精品第一页在线 | 丁香五月缴情综合网 | 欧美日韩在线视频一区 | 精品视频免费看 | 国外调教视频网站 | 欧美成人h版在线观看 | 一级成人免费视频 | 亚洲综合日韩在线 | 久久精品91久久久久久再现 | 91精品一区国产高清在线gif | 性日韩欧美在线视频 | 国产麻豆精品免费视频 | 欧美专区亚洲专区 | 香蕉影视在线观看 | 在线高清| 久久综合精品国产一区二区三区 | 极品嫩模被强到高潮呻吟91 | 少妇性色午夜淫片aaaze | 丝袜一区在线 | 国产夫妻av在线 | 亚洲精品福利在线观看 | 黄色软件在线观看免费 | 99热精品久久 | 成人蜜桃视频 | 在线亚洲高清视频 | 亚洲日韩精品欧美一区二区 | 亚洲精品在线观看免费 | 黄色软件大全网站 | 亚洲精品久久久久999中文字幕 | 日韩视频一区二区在线 | 成人av影视在线 | 国产亚洲视频系列 | 亚洲影音先锋 | 最近中文字幕高清字幕在线视频 | 久久精品这里热有精品 | 91精品久久久久久综合乱菊 | 国产日韩中文在线 | 国产中文字幕视频在线观看 | 91在线影视| 玖玖在线播放 | 久久久激情网 | 成年人电影毛片 | 婷婷色 亚洲| 综合色中色 | 中文免费观看 | 热99在线视频 | 一区二区中文字幕在线播放 | 免费在线观看视频a | 日韩在线观看电影 | 黄视频色网站 | 久久午夜精品视频 | 成人国产精品一区二区 | 美女久久久久久久久久久 | 黄色av在 | 人人干人人艹 | 日本aaa在线观看 | 精品二区久久 | 韩日精品中文字幕 | 国产精品美女久久久网av | 亚洲午夜精品久久久 | av超碰免费在线 | 麻豆综合网 | 美女视频久久黄 | 精品视频123区在线观看 | 91av视频免费在线观看 | 日韩影视大全 | 91高清在线| 日韩欧美视频在线免费观看 | 日韩电影在线观看一区 | 五月天久久久 | 91理论片午午伦夜理片久久 | 天天综合成人 | 久久av福利| 中文av在线免费观看 | 麻豆传媒在线免费看 | 国产精品国内免费一区二区三区 | 国产精品女同一区二区三区久久夜 | 91精品久久久久久综合乱菊 | 色资源在线 | 欧美另类xxx | 亚洲国产剧情av | 亚洲精品在线观 | 色资源在线 | 国产欧美精品一区二区三区四区 | 91麻豆精品国产91久久久久久 | 黄网站免费久久 | 国产免费不卡av | av免费看电影 | 一区二区三区四区影院 | 日韩综合第一页 | 精品国产欧美一区二区三区不卡 | 国产男女爽爽爽免费视频 | 欧美另类tv| 在线观看日本高清mv视频 | av免费在线网 | 高清不卡一区二区在线 | 国产一区网址 | 视频一区二区在线观看 | 国产成人黄色av | 日本韩国中文字幕 | 日免费视频 | 一级片黄色片网站 | 黄网在线免费观看 | av网址最新 | 黄色小网站在线观看 | 久久久精品国产免费观看同学 | 四虎影视成人永久免费观看亚洲欧美 | 久久在线视频精品 | 国产中文字幕视频 | 亚州精品在线视频 | 狠狠gao | 亚洲婷婷伊人 | 免费在线观看av电影 | 欧美一级在线 | 国产污视频在线观看 | 一级一片免费视频 | 日韩电影中文 | 美女网站色 | 天天爽夜夜操 | 成人精品国产免费网站 | 国产精品久久久久久久av电影 | 最近日本中文字幕 | 狠狠色丁香婷婷综合久久片 | 欧美日韩中文字幕在线视频 | 欧美日本一二三 | 色婷婷 亚洲 | 九九免费在线观看 | 亚洲网站在线看 | 亚洲一区免费在线 | 国产精品一区免费看8c0m | 国产精品 日本 | 精品一区二区三区在线播放 | 亚洲免费成人av电影 | 久久蜜臀一区二区三区av | 国内精品久久久久影院优 | 欧美国产三区 | 五月激情站 | 日韩av三区 | 成人免费观看大片 | 久草在线视频国产 | 亚洲精品国产高清 | 成人午夜电影免费在线观看 | 久久国产精品一二三区 | 天天玩天天操天天射 | 国产精品亚洲综合久久 | 九九精品无码 | 国产视频一区精品 | 婷婷激情av | 精品视频 | 美女网站视频色 | 日韩免费看的电影 | 一级理论片在线观看 | 欧美一区二区三区在线视频观看 | 久久久久久免费视频 | 国产精品系列在线 | 丁香婷婷电影 | 久久视频在线看 | av片子在线观看 | 日韩激情影院 | 久久99网 | 国产精品久久久久aaaa九色 | 天堂中文在线视频 | 日本中出在线观看 | 香蕉视频啪啪 | 久久全国免费视频 | 久草在线在线 | 人人舔人人爽 | 中文国产字幕在线观看 | 在线观看国产一区二区 | 日韩午夜电影 | 国产精品久久艹 | 亚洲成人精品国产 | 日韩欧美aaa| 在线韩国电影免费观影完整版 | 日本三级不卡 | 欧美 激情 国产 91 在线 | 婷婷久久一区二区三区 | japanesexxxhd奶水 国产一区二区在线免费观看 | 亚洲国产片 | 午夜在线观看影院 | 超碰在线人人97 | 欧美a级成人淫片免费看 | a电影在线观看 | 久久综合精品一区 | 手机av在线网站 | 99精品欧美一区二区蜜桃免费 | 日韩av看片| 久久久久久美女 | 亚洲国产精品电影在线观看 | 免费av黄色 | 偷拍福利视频一区二区三区 | 精品国产乱码久久久久 | 日韩精品在线观看视频 | 国产精品久久久久久久久久久久午 | 日女人电影 | 久久久香蕉视频 | 美女视频a美女大全免费下载蜜臀 | 中文字幕在线看 | 日韩视频精品在线 | 97超碰人人澡 | 日韩黄色免费看 | 黄色avwww| 国产成人三级在线观看 | 色婷婷激情综合 | 97色se| 精品国偷自产国产一区 | 久久国产精品影视 | av一区二区在线观看中文字幕 | 中文在线免费看视频 | 综合成人在线 | 国产精品一级视频 | 国产资源在线观看 | 国产精品99久久久久久久久 | 中文字幕在线观看的网站 | 久久九九久久 | 精品视频在线观看 | 一级全黄毛片 | 最近最新mv字幕免费观看 | 亚洲一区二区麻豆 | 亚洲国产成人av网 | 黄色av网站在线观看 | 日韩免费在线观看网站 | 久久久久国产一区二区三区 | 欧美久久久久久久久久久 | 成人小电影在线看 | 国产91学生粉嫩喷水 | 国产精品24小时在线观看 | 国产理论在线 | 日本aaa在线观看 | 免费在线观看av网址 | 日韩二区三区 | 五月天色丁香 | 99精品热视频 | 久久久亚洲麻豆日韩精品一区三区 | 偷拍福利视频一区二区三区 | 激情欧美日韩一区二区 | 97人人模人人爽人人喊网 | 91传媒视频在线观看 | 999久久久久久久久6666 | 9999在线| 97网在线观看 | 日韩影片在线观看 | 激情婷婷网 | 99热在线看 | 狠狠干综合 | 国产香蕉视频在线播放 | 欧美日韩在线播放一区 | 午夜精品久久久久 | 日韩精品免费一区二区在线观看 | 久久人91精品久久久久久不卡 | 国产91在线免费视频 | 美女视频永久黄网站免费观看国产 | 2023av| 久久一久久 | 精品欧美一区二区三区久久久 | 91 在线视频| 国产一区二区三精品久久久无广告 | 99久久夜色精品国产亚洲 | 久久精品一区二区三区四区 | 久草热久草视频 | 国产精品黄色影片导航在线观看 | 在线观看福利网站 | av免费播放 | av高清免费在线 | a一片一级 | 看片网站黄 | 人操人| 亚洲理论影院 | 91视频 - x99av | 91成版人在线观看入口 | 美女黄频免费 | 国产裸体永久免费视频网站 | 在线午夜电影神马影院 | 欧洲一区二区三区精品 | 亚洲国产精品视频 | 最近中文字幕在线 | 天天天在线综合网 | 日韩欧美精品免费 | 久久精品国产一区二区三区 | 国产黄色精品在线观看 | 日韩国产精品久久久久久亚洲 | 激情av在线播放 | 成人久久国产 | 黄色免费网站大全 | 国产又粗又长的视频 | 久久伦理 | 深爱五月激情五月 | 久久福利 | 极品国产91在线网站 | 久艹在线播放 | 精品国产一区二区三区日日嗨 | 国产精品久久久久久久久久久不卡 | 精品亚洲va在线va天堂资源站 | 日日日日干 | 在线观看成人网 | 激情视频久久 | 亚洲天堂免费视频 | 草久久av | 国产精品一区二区三区免费视频 | 色综合人人 | 成人精品一区二区三区中文字幕 | 最近最新最好看中文视频 | 久久视频这里有久久精品视频11 | 最近的中文字幕大全免费版 | 成人av免费在线播放 | 狠狠干夜夜爱 | 欧美日韩后 | av资源在线观看 | 91av电影在线观看 | 久久久久美女 | 成人黄色小说网 | 66av99精品福利视频在线 | 一级黄色片在线免费观看 | 国产69精品久久app免费版 | 久久久久久久久久久国产精品 | 超碰在线色 | 国产日韩精品久久 | 91亚洲激情| 国产无吗一区二区三区在线欢 | 久久手机在线视频 | av免费观看网址 | 99re中文字幕 | 人人爽人人搞 | 日本黄色免费在线观看 | 黄色在线观看免费网站 | 97夜夜澡人人双人人人喊 | 久久精品国产亚洲 | 国产不卡一 | 国产高清免费av | 337p日本大胆噜噜噜噜 | 视频三区在线 | 91亚洲在线观看 | 玖玖视频网 | 国产在线不卡一区 | 三级a毛片| 麻豆国产电影 | 国产精品久久久免费看 | 天堂av在线网站 | 国产一级黄色电影 | 免费a级毛片在线看 | 国产区网址 | 久久国产精品久久精品 | 国产美女久久 | 亚洲成av人电影 | 97在线免费视频 | 99婷婷狠狠成为人免费视频 | 久久综合色综合88 | 国产一区二区三区高清播放 | 国产无遮挡又黄又爽馒头漫画 | 精品视频免费在线 | 久久久久久久久久久福利 | 一本大道久久精品懂色aⅴ 五月婷社区 | 有码视频在线观看 | 欧美大香线蕉线伊人久久 | 亚洲va欧美 | 久久不卡国产精品一区二区 | 久久香蕉一区 | 国产乱对白刺激视频在线观看女王 | 18网站在线观看 | 亚洲人成人在线 | 6080yy午夜一二三区久久 | 日韩国产精品久久 | 在线观看免费观看在线91 | 久久黄色成人 | 91av中文| 在线免费观看黄色大片 | 99久久影院 | 精品国产一区二区三区久久久蜜月 | 在线观看91 | 亚洲国产日本 | 激情欧美日韩一区二区 | 国产福利一区二区三区在线观看 | 91精品国产一区二区三区 | 天天干天天射天天操 | 91在线免费播放视频 | 三级黄色三级 | 天天射天天舔天天干 | 狠狠操精品 | 欧美日韩免费一区二区 | 午夜精品av在线 | 中文字幕乱码视频 | 探花视频在线观看免费版 | 亚洲五月六月 | 国产精品原创视频 | 亚洲成a人片综合在线 | 在线免费观看国产视频 | 黄色软件视频网站 | 国产成人一区二区三区电影 | 天天干天天插伊人网 | 天天插日日操 | 人人搞人人爽 | 成人一区二区在线 | 在线成人观看 | 黄色软件网站在线观看 | 二区三区在线观看 | 玖玖玖国产精品 | 欧美日韩高清一区 | 亚洲精品国产品国语在线 | 高清av在线免费观看 | 97av影院| 狠狠插天天干 | 亚洲激情久久 | 精品久久久久久国产 | 国产护士在线 | 久久久国产影视 | 久久不卡国产精品一区二区 | 99产精品成人啪免费网站 | 97视频资源| 麻豆视频免费播放 | 在线看国产精品 | 亚洲精品免费播放 | 国产精品mv在线观看 | 91av手机在线观看 | 国产精品成人av在线 | 人成午夜视频 | 国产精品6| 精品国产一区二区三区四区vr | 久久久久久毛片精品免费不卡 | 亚洲高清不卡av | 国产视频一区在线播放 | 玖玖玖国产精品 | 91丨九色丨国产丨porny精品 | 久久国产一区二区三区 | 久久夜色电影 | 欧美成人手机版 | 免费91麻豆精品国产自产在线观看 | 久久99久久久久 | 国产日韩精品一区二区三区 | 国产黄色在线 | 欧美成人区 | 97人人看 | 亚洲黑丝少妇 | 国产直播av | 西西大胆啪啪 | 欧美先锋影音 | 亚洲国产免费网站 | 天天干视频在线 | av电影免费在线看 | 欧美日韩高清一区二区三区 | 国产精品久久久久久久久久白浆 | 日本不卡视频 | 国产精品国内免费一区二区三区 | 6080yy精品一区二区三区 | 婷婷亚洲综合五月天小说 | av夜夜操| 国产麻豆果冻传媒在线观看 | 色视频一区 | 色视频网站免费观看 | 国产色综合天天综合网 | 色瓜| 亚洲乱亚洲乱亚洲 | 免费在线黄网 | 天天做天天爱天天爽综合网 | 日本久久久亚洲精品 | 国产午夜精品一区二区三区欧美 | 91探花视频 | 精品久久久久久久久久久久久 | 日韩亚洲国产中文字幕 | 亚洲精品久久久久久久蜜桃 | 精品视频一区在线观看 | 人人讲 | 香蕉国产91 | 国产精品久久久久久久毛片 | 久久婷亚洲五月一区天天躁 | 国产高清在线精品 | 成人在线观看av | 亚洲永久精品在线观看 | 在线看国产日韩 | 精品自拍av | 国产中文欧美日韩在线 | 18国产精品白浆在线观看免费 | 久久久国产一区二区三区 | 黄色一级在线免费观看 | 国产打女人屁股调教97 | 午夜私人影院 | 国产黄a三级三级三级三级三级 | 国产一级二级三级视频 | 久精品一区 | 亚洲精品网页 | 欧美日韩高清 | 五月婷婷激情综合网 | 91在线看| 亚洲免费国产 | 成人毛片在线视频 | 国产美女网站在线观看 | 久久综合欧美精品亚洲一区 | 永久免费精品视频网站 | 欧美日在线观看 | 久久成人国产精品一区二区 | 91aaa在线观看 | 超碰97人人在线 | 91视频免费观看 | 亚洲国产欧美一区二区三区丁香婷 | 黄色软件视频网站 | 成人黄色小说视频 | 999电影免费在线观看 | 97在线影院 | 一本一道波多野毛片中文在线 | 欧美精品乱码99久久影院 | 日韩在线视频网站 | 成人免费视频免费观看 | 亚洲精品看片 | 超碰人人草| 在线电影日韩 | 99久久久国产精品免费99 | 日韩二区三区在线观看 | 五月婷婷,六月丁香 | 国产视频精品久久 | 99夜色| 蜜臀久久99精品久久久无需会员 | 天天色天天艹 | 五月婷婷黄色 | 久久免费看av | 中文字幕在线字幕中文 | 91亚洲精品久久久中文字幕 | 人人爱爱人人 | 经典三级一区 | 久久免费影院 | 不卡的av在线 | 精品国产免费一区二区三区五区 | 午夜精品久久久99热福利 | 亚州性色| 欧美一区二区在线看 | 欧美乱码精品一区二区 | www亚洲精品| 黄色大片免费网站 | 久久久九色精品国产一区二区三区 | 欧美一二三视频 | 亚州欧美视频 | 99精品影视 | 国产啊v在线 | 久久综合之合合综合久久 | 欧美日韩视频在线观看一区二区 | 久久伊人婷婷 | 日韩av看片 | 色综合天天天天做夜夜夜夜做 | 九色porny真实丨国产18 | 2024国产精品视频 | 国产视频每日更新 | 久久国内精品视频 | 国产精品永久在线观看 | 热久久最新地址 | 久久国产精品免费视频 | av一级在线观看 | v片在线播放 | 超碰个人在线 | 97av在线视频免费播放 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 天天干 天天摸 天天操 | 五月亚洲综合 | 久久国产系列 | 亚洲 欧洲av| 91av色| 国产精品嫩草影视久久久 | 欧美一区二区免费在线观看 | 国产精品嫩草在线 | 米奇狠狠狠888 | 欧美日韩不卡一区二区三区 | 国产精品嫩草影院99网站 | 国产精品久久久久久久久久了 |