From b03dc3f19e21a22f75a8be8e27a6eb4d15b49187 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 15 May 2024 13:55:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=BB=83=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\347\273\203\344\271\240/hhh.md" | 342 ++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 "\351\273\204\345\215\216\351\233\250/\344\275\234\344\270\232/\347\273\203\344\271\240/hhh.md" diff --git "a/\351\273\204\345\215\216\351\233\250/\344\275\234\344\270\232/\347\273\203\344\271\240/hhh.md" "b/\351\273\204\345\215\216\351\233\250/\344\275\234\344\270\232/\347\273\203\344\271\240/hhh.md" new file mode 100644 index 0000000..81a3216 --- /dev/null +++ "b/\351\273\204\345\215\216\351\233\250/\344\275\234\344\270\232/\347\273\203\344\271\240/hhh.md" @@ -0,0 +1,342 @@ +前端: +``` + + + +``` +后端: +``` +import Koa from 'koa'; +import bodyParser from 'koa-bodyparser'; +import cors from 'koa2-cors'; +import Router from 'koa-router'; + +import { DataTypes,Sequelize,Op } from 'sequelize'; +let sequelize=new Sequelize('demoss','sa','123456',{ + host:'HHY', + dialect:'mssql' +}); + +const Blogs=sequelize.define('Blogs',{ + title:{type:DataTypes.STRING}, + author:{type:DataTypes.STRING}, + flag:{type:DataTypes.STRING} +}) + +await Blogs.sync(); + + +let app=new Koa(); + +let router =new Router(); + +router.get('/blogs',async(ctx)=>{ + let keyword=ctx.request.query.keyword || ''; + keyword=keyword.trim(); + if(keyword){ + let list=await Blogs.findAll({ + where:{ + [Op.or]: + [ + {title:{[Op.like]:'%'+keyword+'%'}}, + {author:{[Op.like]:'%'+keyword+'%'}}, + {flag:{[Op.like]:'%'+keyword+'%'}}, + + ] + } + }); + ctx.body={ + code:1000, + data:list, + msg:'查询成功' + } + }else{ + let list=await Blogs.findAll(); + ctx.body={ + code:1000, + data:list, + msg:'获取博客成功' + } + } +}) + +router.get('/blogs/:id?',async(ctx)=>{ + let id=ctx.params *1 || 0; + console.log(id); + + let list=await Blogs.findByPk(id); + ctx.body={ + code:1000, + data:list, + msg:'获取指定id博客成功' + } +}) + +router.post('blogs',async(ctx)=>{ + let obj=ctx.request.body; + console.log(obj); + + let row=await Blogs.create(obj); + ctx.body={ + code:1000, + data:row, + msg:'创建博客成功' + } +}) + +router.put('/blogs/:id',async(ctx)=>{ + let id=ctx.params.id * 1 || 0; + console.log(id); + let obj=ctx.request.body; + console.log(obj); + let item=await Blogs.findByPk(id); + if(item){ + let data=await Blogs.update(obj,{ + where:{ + id:id + } + }); + ctx.body={ + code:1000, + data:data, + msg:'修改图书成功' + } + }else{ + ctx.body={ + code:4000, + data:null, + msg:'找不到图书' + } + } +}) + +router.delete('/blogs/:id',async(ctx)=>{ + let id=ctx.params.id || 0; + console.log(id); + + let row=await Blogs.findByPk(id); + if(row){ + Blogs.destroy({ + where:{ + id:id + } + }); + ctx.body={ + code:1000, + data:null, + msg:'删除成功' + } + }else{ + ctx.body={ + code:4000, + data:null, + msg:'删除失败' + } + } +}) + +app.use (cors()); +app.use(bodyParser()); +app.use(router.routes()); + +let port=4000; +app.listen(port); +console.log(`地址服务于:http://localhost:${port}`); +``` \ No newline at end of file -- Gitee From 86e434e0a49f73349fc7e838b87dbe587dccc095 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 May 2024 11:16:56 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2024.05.13-Pinia.md" | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 "\351\273\204\345\215\216\351\233\250/2024.05.13-Pinia.md" diff --git "a/\351\273\204\345\215\216\351\233\250/2024.05.13-Pinia.md" "b/\351\273\204\345\215\216\351\233\250/2024.05.13-Pinia.md" new file mode 100644 index 0000000..9925739 --- /dev/null +++ "b/\351\273\204\345\215\216\351\233\250/2024.05.13-Pinia.md" @@ -0,0 +1,101 @@ +``` +安装:pinia: yarn add pinia +``` + +#### 简介 + +``` +通过 Mastering Pinia 的免费视频掌握更多内容 +Pinia 起始于 2019 年 11 月左右的一次实验,其目的是设计一个拥有组合式 API 的 Vue 状态管理库。从那时起,我们就倾向于同时支持 Vue 2 和 Vue 3,并且不强制要求开发者使用组合式 API,我们的初心至今没有改变。除了安装和 SSR 两章之外,其余章节中提到的 API 均支持 Vue 2 和 Vue 3。虽然本文档主要是面向 Vue 3 的用户,但在必要时会标注出 Vue 2 的内容,因此 Vue 2 和 Vue 3 的用户都可以阅读本文档。 +``` + +#### 基础示例 +``` +下面就是 pinia API 的基本用法 (为继续阅读本简介请确保你已阅读过了开始章节)。你可以先创建一个 Store: + +js +// stores/counter.js +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', { + state: () => { + return { count: 0 } + }, + // 也可以这样定义 + // state: () => ({ count: 0 }) + actions: { + increment() { + this.count++ + }, + }, +}) + +然后你就可以在一个组件中使用该 store 了: + +vue + + +``` + +#### 更真实的示例 +这是一个更完整的 Pinia API 示例,在 JavaScript 中也使用了类型提示。对于某些开发者来说,可能足以在不进一步阅读的情况下直接开始阅读本节内容,但我们仍然建议你先继续阅读文档的其余部分,甚至跳过此示例,在阅读完所有核心概念之后再回来。 + +``` +js +import { defineStore } from 'pinia' + +export const useTodos = defineStore('todos', { + state: () => ({ + /** @type {{ text: string, id: number, isFinished: boolean }[]} */ + todos: [], + /** @type {'all' | 'finished' | 'unfinished'} */ + filter: 'all', + // 类型将自动推断为 number + nextId: 0, + }), + getters: { + finishedTodos(state) { + // 自动补全! ✨ + return state.todos.filter((todo) => todo.isFinished) + }, + unfinishedTodos(state) { + return state.todos.filter((todo) => !todo.isFinished) + }, + /** + * @returns {{ text: string, id: number, isFinished: boolean }[]} + */ + filteredTodos(state) { + if (this.filter === 'finished') { + // 调用其他带有自动补全的 getters ✨ + return this.finishedTodos + } else if (this.filter === 'unfinished') { + return this.unfinishedTodos + } + return this.todos + }, + }, + actions: { + // 接受任何数量的参数,返回一个 Promise 或不返回 + addTodo(text) { + // 你可以直接变更该状态 + this.todos.push({ text, id: this.nextId++, isFinished: false }) + }, + }, +}) +``` + + + + + -- Gitee From 7c76fcb0dcbda0a9a84a936ada701f6ace34feb0 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 19 May 2024 11:27:40 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2024.05.16-\345\244\215\344\271\240.md" | 342 ++++++++++++++++++ 1 file changed, 342 insertions(+) create mode 100644 "\351\273\204\345\215\216\351\233\250/2024.05.16-\345\244\215\344\271\240.md" diff --git "a/\351\273\204\345\215\216\351\233\250/2024.05.16-\345\244\215\344\271\240.md" "b/\351\273\204\345\215\216\351\233\250/2024.05.16-\345\244\215\344\271\240.md" new file mode 100644 index 0000000..93c3551 --- /dev/null +++ "b/\351\273\204\345\215\216\351\233\250/2024.05.16-\345\244\215\344\271\240.md" @@ -0,0 +1,342 @@ +#### 复习 +``` +在app.js文件里写: + +import Koa from 'koa'; + +import Router from 'koa-router'; + +import bodyparser from 'koa-bodyparser'; + +import cors from 'koa2-cors'; + +import { Sequelize , DataTypes , Op } from 'sequelize'; + +const app=new Koa(); + +let router=new Router(); + +let sequelize=new Sequelize('Good_project','sa','YLJW6195', +{ + host:'localhost', + dialect:'mssql' +}); + +let Goods=sequelize.define('Goods', +{ + title:{type:DataTypes.STRING}, + author:{type:DataTypes.STRING}, + flag:{type:DataTypes.STRING}, +}); + +await Goods.sync(); + +router.get('/goods',async(ctx)=> +{ + let keyword = ctx.request.query.keyword || ''; + keyword = keyword.trim(); + if (keyword) { + let list = await Goods.findAll + ({ + where: + { + [Op.or]: + [ + { title: { [Op.like]: '%' + keyword + '%' } }, + { author: { [Op.like]: '%' + keyword + '%' } }, + { flag: { [Op.like]: '%' + keyword + '%' } }, + ] + } + }); + ctx.body = + { + code: 1000, + data: list, + msg: '查找数据成功' + }; + } + else { + let list = await Goods.findAll(); + ctx.body = + { + code: 1000, + data: list, + msg: '获取所有商品成功' + }; + }; +}); + +router.get('/goods/:id',async(ctx)=> +{ + let id = ctx.params.id * 1 || 0; + let row = await Goods.findAll + ({ + where: + { + id: id + } + }); + let res = + { + code: 1000, + data: row[0], + msg: `获取指定id为${id}的商品成功` + } + ctx.body = res; +}); + +router.post('/goods',async(ctx)=> +{ + let obj = ctx.request.body; + let row = await Goods.create(obj); + ctx.body = + { + code: 1000, + data: row, + msg: '创建商品成功' + }; +}); + +router.put('/goods/:id',async(ctx)=> +{ + let id = ctx.params.id * 1 || 0; + let obj = ctx.request.body; + let item = Goods.findByPk(id); + if (item) + { + let data = await Goods.update(obj, + { + where: { id: id } + }); + ctx.body = + { + code: 1000, + data: data, + msg: '修改成功' + }; + } + else + { + ctx.body = + { + code: 4000, + data: null, + msg: '找不到' + }; + }; +}); + +router.delete('/goods/:id',async(ctx)=> +{ + let id = ctx.params.id || 0; + let row = await Goods.findByPk(id); + if (row) { + Goods.destroy + ({ + where: { id: id } + }); + ctx.body = + { + code: 1000, + msg: '删除成功' + }; + } + else { + ctx.body = + { + code: 4000, + msg: '找不到你要删除的商品,请确认后重试' + }; + }; +}); + +// 解决跨域问题 +app.use(cors()); + +// 解决post、put请求拿到表单数据的问题 +app.use(bodyparser()); + +// 解决路由问题 +app.use(router.routes()); + +let port=3000; + +app.listen(port); + +console.log(`http服务器运行与如下地址:http://localhost:${port}`); +在App.vue文件里写: + + + + + + +``` \ No newline at end of file -- Gitee