diff --git "a/\346\261\244\345\270\214\351\224\220/\347\254\224\350\256\260/20240513-pinia.md" "b/\346\261\244\345\270\214\351\224\220/\347\254\224\350\256\260/20240513-pinia.md" new file mode 100644 index 0000000000000000000000000000000000000000..fe2c47aeac311137f58c03d77a8d07c54e261a11 --- /dev/null +++ "b/\346\261\244\345\270\214\351\224\220/\347\254\224\350\256\260/20240513-pinia.md" @@ -0,0 +1,54 @@ +### pinia +Pinia 是 Vue 的专属状态管理库,它允许你跨组件或页面共享状态。如果你熟悉组合式 API 的话,你可能会认为可以通过一行简单的 export const state = reactive({}) 来共享一个全局状态。对于单页应用来说确实可以,但如果应用在服务器端渲染,这可能会使你的应用暴露出一些安全漏洞。 而如果使用 Pinia,即使在小型单页应用中,你也可以获得如下功能: + +``` +Devtools 支持 +追踪 actions、mutations 的时间线 +在组件中展示它们所用到的 Store +让调试更容易的 Time travel +热更新 +不必重载页面即可修改 Store +开发时可保持当前的 State +插件:可通过插件扩展 Pinia 功能 +为 JS 开发者提供适当的 TypeScript 支持以及自动补全功能。 +支持服务端渲染 +``` + +下载 +``` +yarn add pinia +``` + +使用 +``` +// stores/counter.js +import { defineStore } from 'pinia' + +export const useCounterStore = defineStore('counter', { + state: () => { + return { count: 0 } + }, + // 也可以这样定义 + // state: () => ({ count: 0 }) + actions: { + increment() { + this.count++ + }, + }, +}) +``` +``` + + +``` \ No newline at end of file diff --git "a/\346\261\244\345\270\214\351\224\220/\347\254\224\350\256\260/20240516.\345\244\215\344\271\240.md" "b/\346\261\244\345\270\214\351\224\220/\347\254\224\350\256\260/20240516.\345\244\215\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..621cdf8a8f5a703f37994b373ff9fe0b3edbb196 --- /dev/null +++ "b/\346\261\244\345\270\214\351\224\220/\347\254\224\350\256\260/20240516.\345\244\215\344\271\240.md" @@ -0,0 +1,118 @@ +``` +import Koa from "koa"; +import Router from "koa-router"; +import bodyParser from "koa-bodyparser"; +import cors from "koa2-cors"; +import { DataTypes, Op, Sequelize } from "sequelize"; +const app = new Koa(); +const router = new Router(); +const port = 3000; +const sequelize = new Sequelize("bloginfo", "sa", "123456", { + host: "localhost", + dialect: "mssql" +}) +const blogs = sequelize.define("blogs", { + name: { type: DataTypes.STRING }, + title: { type: DataTypes.STRING }, + author: { type: DataTypes.STRING }, + flag: { type: DataTypes.STRING } +}) +await blogs.sync(); +router.get("/blog/:id?", async (ctx) => { + let keyword = ctx.request.query.keyword; + if (keyword) { + let data = await blogs.findAll({ + where: { + [Op.or]: [ + { name: { [Op.like]: `%${keyword}%` } }, + { title: { [Op.like]: `%${keyword}%` } }, + { author: { [Op.like]: `%${keyword}%` } }, + { flag: { [Op.like]: `%${keyword}%` } } + ] + } + }) + ctx.body = { + code: 1000, + data: data, + msg: "查找数据成功" + } + } else { + let id = ctx.params.id; + let data; + if (id) { + let list = await blogs.findByPk(id); + data = list; + } else { + let list = await blogs.findAll(); + data = list; + } + ctx.body={ + code:1000, + data:data, + msg:"获取数据成功" + } + } +}) +router.post("/blog", async (ctx) => { + let data = ctx.request.body; + await blogs.create(data).then(res => { + ctx.body = { + code: 1000, + data: res, + msg: "添加成功" + } + }) +}) +router.put("/blog/:id?", async (ctx) => { + let id=ctx.params.id; + let data=ctx.request.body; + let list=await blogs.findByPk(id); + if(list){ + await blogs.update(data,{ + where:{ + id:id + } + }).then(()=>{ + ctx.body={ + code:1000, + data:data, + msg:`修改id为${id}的数据成功` + } + + }) + }else{ + ctx.body={ + code:4000, + msg:`没有这条数据` + } + } +}) +router.del("/blog/:id?", async (ctx) => { + let id=ctx.params.id; + let list=await blogs.findByPk(id); + if(list){ + await blogs.destroy({ + where:{ + id:id + } + }).then(()=>{ + ctx.body={ + code:1000, + msg:`删除id为${id}的数据成功` + } + + }) + }else{ + ctx.body={ + code:4000, + msg:`没有这条数据` + } + } +}) +app.use(cors()); +app.use(bodyParser()); +app.use(router.routes()); +app.listen(port, () => { + console.log(`app is running at http://localhost:${port}`); +}) +``` \ No newline at end of file