From c7a2ee8c93d2dc4b36d4da24e0831d8af12590ec Mon Sep 17 00:00:00 2001 From: lanpangzhi <875727617@qq.com> Date: Sun, 17 Sep 2023 05:38:37 +0000 Subject: [PATCH] =?UTF-8?q?GitHub=20Actions=20=E8=87=AA=E5=8A=A8=E9=83=A8?= =?UTF-8?q?=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 404.html | 382 + "Buffer\345\257\271\350\261\241.html" | 448 ++ CNAME | 1 + ...\205\350\256\276\347\275\256Fail2ban.html" | 448 ++ ...222\214const\345\217\230\351\207\217.html" | 448 ++ ...\345\215\225\345\256\236\347\216\260.html" | 448 ++ ...\346\215\256\350\257\267\346\261\202.html" | 448 ++ ...\344\273\266\344\270\212\344\274\240.html" | 448 ++ ...346\236\266cookie\345\222\214session.html" | 448 ++ "Express\350\267\257\347\224\261.html" | 448 ++ ...\345\210\260\346\234\254\345\234\260.html" | 448 ++ ...\346\234\254\345\233\236\351\200\200.html" | 448 ++ ...6\210\220SSH\345\205\254\351\222\245.html" | 451 ++ ...\347\240\201\346\217\220\344\272\244.html" | 449 ++ ...0\220Algolia\346\220\234\347\264\242.html" | 456 ++ ...0\205\276\350\256\257\344\272\221COS.html" | 454 ++ ...\346\255\245\351\227\256\351\242\230.html" | 454 ++ ...\346\211\230\345\216\237\347\220\206.html" | 448 ++ ...\344\273\266\351\200\232\347\237\245.html" | 448 ++ ...\345\235\227\346\234\272\345\210\266.html" | 448 ++ "TypeScript\347\256\200\344\273\213.html" | 441 ++ ...\350\257\225\347\216\257\345\242\203.html" | 454 ++ ...210\345\274\217API(Composition API) .html" | 448 ++ ...0\213\345\256\211\350\243\205MongoDB.html" | 450 ++ ...270\213\345\256\211\350\243\205MySQL.html" | 453 ++ archives/2017/12/index.html | 603 ++ archives/2017/index.html | 603 ++ archives/2018/01/index.html | 481 ++ archives/2018/02/index.html | 481 ++ archives/2018/03/index.html | 417 ++ archives/2018/04/index.html | 417 ++ archives/2018/05/index.html | 615 ++ archives/2018/05/page/2/index.html | 519 ++ archives/2018/06/index.html | 481 ++ archives/2018/07/index.html | 321 + archives/2018/09/index.html | 321 + archives/2018/10/index.html | 321 + archives/2018/11/index.html | 385 + archives/2018/12/index.html | 385 + archives/2018/index.html | 635 ++ archives/2018/page/2/index.html | 619 ++ archives/2018/page/3/index.html | 615 ++ archives/2018/page/4/index.html | 623 ++ archives/2018/page/5/index.html | 619 ++ archives/2018/page/6/index.html | 359 + archives/2019/03/index.html | 385 + archives/2019/04/index.html | 353 + archives/2019/06/index.html | 321 + archives/2019/index.html | 489 ++ archives/2020/06/index.html | 353 + archives/2020/index.html | 353 + archives/2021/07/index.html | 321 + archives/2021/08/index.html | 353 + archives/2021/09/index.html | 321 + archives/2021/10/index.html | 353 + archives/2021/11/index.html | 353 + archives/2021/12/index.html | 321 + archives/2021/index.html | 597 ++ archives/2022/02/index.html | 321 + archives/2022/05/index.html | 321 + archives/2022/06/index.html | 321 + archives/2022/07/index.html | 321 + archives/2022/09/index.html | 321 + archives/2022/10/index.html | 353 + archives/2022/11/index.html | 321 + archives/2022/index.html | 569 ++ archives/2023/01/index.html | 321 + archives/2023/02/index.html | 353 + archives/2023/03/index.html | 353 + archives/2023/04/index.html | 353 + archives/2023/05/index.html | 353 + archives/2023/06/index.html | 353 + archives/2023/07/index.html | 321 + archives/2023/08/index.html | 321 + archives/2023/09/index.html | 321 + archives/2023/index.html | 639 ++ archives/2023/page/2/index.html | 431 ++ archives/index.html | 639 ++ archives/page/10/index.html | 619 ++ archives/page/11/index.html | 321 + archives/page/2/index.html | 643 ++ archives/page/3/index.html | 639 ++ archives/page/4/index.html | 635 ++ archives/page/5/index.html | 635 ++ archives/page/6/index.html | 619 ++ archives/page/7/index.html | 615 ++ archives/page/8/index.html | 627 ++ archives/page/9/index.html | 619 ++ assets/algolia/algoliasearch.js | 6629 +++++++++++++++++ assets/algolia/algoliasearch.min.js | 4 + assets/algolia/algoliasearchLite.js | 4194 +++++++++++ assets/algolia/algoliasearchLite.min.js | 3 + atom.xml | 438 ++ ...\350\257\201\345\222\214Bearer-Token.html" | 448 ++ baidusitemap.xml | 1838 +++++ "centos7\345\256\211\350\243\205MySQL.html" | 450 ++ "centos7\345\256\211\350\243\205mongodb.html" | 448 ++ ...234\272\350\207\252\345\220\257nginx.html" | 448 ++ content.json | 1 + css/fonts/fontawesome/FontAwesome.otf | Bin 0 -> 134808 bytes css/fonts/fontawesome/fontawesome-webfont.eot | Bin 0 -> 165742 bytes css/fonts/fontawesome/fontawesome-webfont.svg | 2671 +++++++ css/fonts/fontawesome/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fontawesome/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fontawesome/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes css/fonts/roboto/Roboto-Bold.eot | Bin 0 -> 20966 bytes css/fonts/roboto/Roboto-Bold.ttf | Bin 0 -> 127744 bytes css/fonts/roboto/Roboto-Bold.woff | Bin 0 -> 62876 bytes css/fonts/roboto/Roboto-Bold.woff2 | Bin 0 -> 49976 bytes css/fonts/roboto/Roboto-Light.eot | Bin 0 -> 20940 bytes css/fonts/roboto/Roboto-Light.ttf | Bin 0 -> 126792 bytes css/fonts/roboto/Roboto-Light.woff | Bin 0 -> 62316 bytes css/fonts/roboto/Roboto-Light.woff2 | Bin 0 -> 49380 bytes css/fonts/roboto/Roboto-Medium.eot | Bin 0 -> 21364 bytes css/fonts/roboto/Roboto-Medium.ttf | Bin 0 -> 127488 bytes css/fonts/roboto/Roboto-Medium.woff | Bin 0 -> 62980 bytes css/fonts/roboto/Roboto-Medium.woff2 | Bin 0 -> 50224 bytes css/fonts/roboto/Roboto-Regular.eot | Bin 0 -> 21320 bytes css/fonts/roboto/Roboto-Regular.ttf | Bin 0 -> 126072 bytes css/fonts/roboto/Roboto-Regular.woff | Bin 0 -> 61736 bytes css/fonts/roboto/Roboto-Regular.woff2 | Bin 0 -> 49236 bytes css/fonts/roboto/Roboto-Thin.eot | Bin 0 -> 21659 bytes css/fonts/roboto/Roboto-Thin.ttf | Bin 0 -> 127584 bytes css/fonts/roboto/Roboto-Thin.woff | Bin 0 -> 61628 bytes css/fonts/roboto/Roboto-Thin.woff2 | Bin 0 -> 48524 bytes css/style.css | 11 + ...\345\210\227\345\233\272\345\256\232.html" | 448 ++ ...\347\232\204\345\205\203\347\264\240.html" | 448 ++ ...\347\234\201\347\225\245\345\217\267.html" | 451 ++ ...\346\235\277\345\274\225\346\223\216.html" | 448 ++ ...\346\213\251\345\214\272\351\227\264.html" | 448 ++ ...\345\244\215\351\200\211\346\241\206.html" | 448 ++ ...\345\215\225\345\205\245\345\235\221.html" | 448 ++ favicon.ico | Bin 0 -> 1150 bytes ...\214-for-of-\345\214\272\345\210\253.html" | 448 ++ "fs\346\250\241\345\235\227.html" | 448 ++ "global\345\257\271\350\261\241.html" | 448 ++ hello-world.html | 439 ++ "http\346\250\241\345\235\227.html" | 448 ++ img/alipay.jpg | Bin 0 -> 22420 bytes img/avatar.png | Bin 0 -> 111200 bytes img/brand.jpg | Bin 0 -> 33276 bytes img/cc.png | Bin 0 -> 444 bytes img/img-err.png | Bin 0 -> 2646 bytes img/img-loading.png | Bin 0 -> 2104 bytes img/wechat.jpg | Bin 0 -> 21070 bytes index.html | 744 ++ ...\345\236\213\350\275\254\346\215\242.html" | 451 ++ ...\216\273\351\207\215-ES6\347\211\210.html" | 448 ++ ...\347\273\204\345\216\273\351\207\215.html" | 450 ++ js/main.js | 1 + js/main.min.js | 1 + js/search.js | 1 + js/search.min.js | 1 + js/waline.js | 1 + js/waline.min.js | 8 + ...\347\240\201\345\256\236\347\216\260.html" | 448 ++ ...7\256\2270-1-0-2-0-30000000000000004.html" | 448 ++ ...\345\222\214\351\253\230\345\272\246.html" | 448 ++ live2dw/assets/koharu.model.json | 1 + live2dw/assets/koharu.physics.json | 1 + live2dw/assets/moc/koharu.2048/texture_00.png | Bin 0 -> 263518 bytes live2dw/assets/moc/koharu.moc | Bin 0 -> 254075 bytes live2dw/assets/mtn/01.mtn | 63 + live2dw/assets/mtn/02.mtn | 63 + live2dw/assets/mtn/03.mtn | 63 + live2dw/assets/mtn/04.mtn | 63 + live2dw/assets/mtn/05.mtn | 65 + live2dw/assets/mtn/06.mtn | 63 + live2dw/assets/mtn/07.mtn | 63 + live2dw/assets/mtn/08.mtn | 63 + live2dw/assets/mtn/09.mtn | 63 + live2dw/assets/mtn/idle.mtn | 63 + live2dw/lib/L2Dwidget.0.min.js | 3 + live2dw/lib/L2Dwidget.0.min.js.map | 1 + live2dw/lib/L2Dwidget.min.js | 3 + live2dw/lib/L2Dwidget.min.js.map | 1 + ...\351\235\242\345\272\224\347\224\250.html" | 450 ++ ...\344\270\213\345\256\211\350\243\205.html" | 455 ++ ...5\217\260get\350\257\267\346\261\202.html" | 448 ++ ...\217\260post\350\257\267\346\261\202.html" | 448 ++ ...\346\227\266\344\273\273\345\212\241.html" | 448 ++ "node\347\210\254\350\231\253.html" | 448 ++ "node\350\277\236\346\216\245MySQL.html" | 448 ++ ...\347\256\241\347\220\206\345\221\230.html" | 451 ++ ...\347\224\250\344\273\213\347\273\215.html" | 448 ++ ...\345\256\235\351\225\234\345\203\217.html" | 450 ++ ...346\234\254-npm-ERR-Unexpected-token.html" | 450 ++ ...\347\263\273\347\273\237\357\274\211.html" | 455 ++ page/10/index.html | 744 ++ page/11/index.html | 333 + page/2/index.html | 744 ++ page/3/index.html | 744 ++ page/4/index.html | 744 ++ page/5/index.html | 744 ++ page/6/index.html | 744 ++ page/7/index.html | 744 ++ page/8/index.html | 744 ++ page/9/index.html | 745 ++ "path\346\250\241\345\235\227.html" | 448 ++ ...\347\224\250\346\214\207\345\215\227.html" | 448 ++ ...\346\234\272\350\207\252\345\220\257.html" | 448 ++ "querystring\346\250\241\345\235\227.html" | 448 ++ robots.txt | 12 + sitemap.xml | 725 ++ "stream\346\250\241\345\235\227.html" | 448 ++ tags/API/index.html | 730 ++ tags/COS/index.html | 602 ++ tags/Debian9/index.html | 602 ++ tags/EJS/index.html | 602 ++ tags/ES6/index.html | 634 ++ .../index.html" | 602 ++ tags/Express/index.html | 896 +++ tags/Express/page/2/index.html | 608 ++ tags/Fail2ban/index.html | 602 ++ tags/Git/index.html | 698 ++ tags/GitHub-Actions/index.html | 602 ++ tags/Hexo/index.html | 698 ++ tags/MongoDB/index.html | 634 ++ tags/MySQL/index.html | 666 ++ tags/Node-js/index.html | 896 +++ tags/Node-js/page/2/index.html | 896 +++ tags/Node-js/page/3/index.html | 832 +++ tags/Promise/index.html | 698 ++ "tags/SSH\345\205\254\351\222\245/index.html" | 602 ++ tags/TypeScript/index.html | 602 ++ tags/VSCode/index.html | 602 ++ tags/Volta/index.html | 602 ++ tags/Waline/index.html | 602 ++ tags/Windows/index.html | 634 ++ tags/apidoc/index.html | 602 ++ tags/axios/index.html | 602 ++ tags/cli/index.html | 602 ++ tags/cloudflare/index.html | 602 ++ tags/cookie/index.html | 602 ++ tags/css/index.html | 666 ++ tags/element-plus/index.html | 602 ++ tags/element-ui/index.html | 634 ++ tags/express-generator/index.html | 602 ++ tags/index.html | 6098 +++++++++++++++ tags/javascript/index.html | 858 +++ .../index.html" | 602 ++ tags/nativefier/index.html | 602 ++ tags/nginx/index.html | 602 ++ tags/npm/index.html | 762 ++ tags/pinia/index.html | 602 ++ tags/pm2/index.html | 602 ++ tags/session/index.html | 602 ++ tags/travis-ci/index.html | 602 ++ tags/v2ray/index.html | 602 ++ tags/vercel/index.html | 602 ++ tags/vite/index.html | 602 ++ tags/vue-cli4/index.html | 602 ++ tags/vue2-0/index.html | 794 ++ .../index.html" | 602 ++ tags/vue3-0/index.html | 698 ++ tags/webpack/index.html | 666 ++ tags/yarn/index.html | 666 ++ .../index.html" | 602 ++ .../index.html" | 602 ++ .../index.html" | 602 ++ .../index.html" | 634 ++ .../index.html" | 602 ++ .../index.html" | 602 ++ "tags/\346\225\260\347\273\204/index.html" | 634 ++ .../index.html" | 602 ++ "tags/\347\202\271\351\200\217/index.html" | 602 ++ "tags/\347\210\254\350\231\253/index.html" | 602 ++ .../index.html" | 634 ++ .../index.html" | 666 ++ .../index.html" | 602 ++ .../index.html" | 602 ++ "tags/\350\242\253\345\242\231/index.html" | 602 ++ .../index.html" | 602 ++ "tags/\350\267\257\347\224\261/index.html" | 602 ++ "tags/\351\203\250\347\275\262/index.html" | 602 ++ .../index.html" | 634 ++ .../index.html" | 602 ++ "url\346\250\241\345\235\227.html" | 450 ++ ...\346\226\260\346\212\245\351\224\231.html" | 448 ++ ...\346\265\217\350\247\210\345\231\250.html" | 450 ++ ...3\345\210\240\351\231\244console-log.html" | 448 ++ ...\205\245element-plus\347\232\204Icon.html" | 448 ++ ...\345\221\275\345\221\250\346\234\237.html" | 450 ++ ...\344\273\266\346\240\267\345\274\217.html" | 448 ++ ...\345\221\275\345\221\250\346\234\237.html" | 458 ++ ...\346\200\201\350\265\204\346\272\220.html" | 452 ++ ...\351\227\250\346\214\207\345\215\227.html" | 452 ++ ...\345\255\230\346\272\242\345\207\272.html" | 448 ++ ...\347\224\250\344\273\213\347\273\215.html" | 448 ++ ...3\200\344\271\210\346\230\257Node-js.html" | 448 ++ ...47\247\273\345\210\260GitHub-Actions.html" | 448 ++ ...0-Volta-\347\256\241\347\220\206Node.html" | 448 ++ ...346\234\215\345\212\241-\344\272\214.html" | 448 ++ ...\345\217\243\346\234\215\345\212\241.html" | 451 ++ ...\357\274\210\344\270\211\357\274\211.html" | 448 ++ ...6\210\220api\346\226\207\346\241\243.html" | 450 ++ ...0\220express\345\272\224\347\224\250.html" | 448 ++ ...\212\250\346\236\204\345\273\272Hexo.html" | 459 ++ ...\233\256Saas\346\212\245\351\224\231.html" | 448 ++ ...5\267\261\347\232\204NPM\345\214\205.html" | 448 ++ ...\346\203\240\346\225\264\347\220\206.html" | 448 ++ ...\344\275\277\347\224\250clipboard-js.html" | 448 ++ ...\345\270\203\350\256\242\351\230\205.html" | 448 ++ ...e-allsettled\346\226\271\346\263\225.html" | 448 ++ ...Promise-race\346\226\271\346\263\225.html" | 448 ++ ...1Promsie-all\346\226\271\346\263\225.html" | 448 ++ ...\346\263\225\345\256\236\347\216\260.html" | 448 ++ ...\345\216\206\347\273\204\344\273\266.html" | 448 ++ ...6\231\347\256\200\346\230\223Promise.html" | 448 ++ ...\350\275\254\346\265\201\351\207\217.html" | 448 ++ ...\345\211\252\350\264\264\346\235\277.html" | 455 ++ ...\346\236\266\345\261\217\345\220\247.html" | 452 ++ ...\346\263\225\344\275\277\347\224\250.html" | 451 ++ ...\350\243\205\345\244\261\350\264\245.html" | 448 ++ ...\351\200\217\351\227\256\351\242\230.html" | 448 ++ ...\350\205\276\350\256\257\344\272\221.html" | 457 ++ 317 files changed, 150628 insertions(+) create mode 100644 404.html create mode 100644 "Buffer\345\257\271\350\261\241.html" create mode 100644 CNAME create mode 100644 "Debian9\345\256\211\350\243\205\350\256\276\347\275\256Fail2ban.html" create mode 100644 "ES6\347\263\273\345\210\227-let\345\222\214const\345\217\230\351\207\217.html" create mode 100644 "Express\344\270\255\351\227\264\344\273\266body-parser\347\256\200\345\215\225\345\256\236\347\216\260.html" create mode 100644 "Express\345\244\204\347\220\206\346\225\260\346\215\256\350\257\267\346\261\202.html" create mode 100644 "Express\346\226\207\344\273\266\344\270\212\344\274\240.html" create mode 100644 "Express\346\241\206\346\236\266cookie\345\222\214session.html" create mode 100644 "Express\350\267\257\347\224\261.html" create mode 100644 "Git\346\213\211\345\217\226\350\277\234\347\250\213\345\210\206\346\224\257\345\210\260\346\234\254\345\234\260.html" create mode 100644 "Git\347\211\210\346\234\254\345\233\236\351\200\200.html" create mode 100644 "Git\347\224\237\346\210\220SSH\345\205\254\351\222\245.html" create mode 100644 "Git\351\205\215\347\275\256https\345\205\215\347\224\250\346\210\267\345\220\215\345\222\214\345\257\206\347\240\201\346\217\220\344\272\244.html" create mode 100644 "Hexo-Next\351\233\206\346\210\220Algolia\346\220\234\347\264\242.html" create mode 100644 "Hexo\345\215\232\345\256\242\344\273\216Coding\350\277\201\347\247\273\345\210\260\350\205\276\350\256\257\344\272\221COS.html" create mode 100644 "Hexo\345\215\232\345\256\242\345\244\232\347\253\257\345\220\214\346\255\245\351\227\256\351\242\230.html" create mode 100644 "JavaScript\347\232\204\344\272\213\344\273\266\345\247\224\346\211\230\345\216\237\347\220\206.html" create mode 100644 "Node-js\344\275\277\347\224\250Nodemailer\345\217\221\351\200\201\351\202\256\344\273\266\351\200\232\347\237\245.html" create mode 100644 "Node\346\250\241\345\235\227\346\234\272\345\210\266.html" create mode 100644 "TypeScript\347\256\200\344\273\213.html" create mode 100644 "VSCode-\351\205\215\347\275\256Node\350\260\203\350\257\225\347\216\257\345\242\203.html" create mode 100644 "Vue3\347\273\204\345\220\210\345\274\217API(Composition API) .html" create mode 100644 "Windows\344\270\213\345\256\211\350\243\205MongoDB.html" create mode 100644 "Windows\344\270\213\345\256\211\350\243\205MySQL.html" create mode 100644 archives/2017/12/index.html create mode 100644 archives/2017/index.html create mode 100644 archives/2018/01/index.html create mode 100644 archives/2018/02/index.html create mode 100644 archives/2018/03/index.html create mode 100644 archives/2018/04/index.html create mode 100644 archives/2018/05/index.html create mode 100644 archives/2018/05/page/2/index.html create mode 100644 archives/2018/06/index.html create mode 100644 archives/2018/07/index.html create mode 100644 archives/2018/09/index.html create mode 100644 archives/2018/10/index.html create mode 100644 archives/2018/11/index.html create mode 100644 archives/2018/12/index.html create mode 100644 archives/2018/index.html create mode 100644 archives/2018/page/2/index.html create mode 100644 archives/2018/page/3/index.html create mode 100644 archives/2018/page/4/index.html create mode 100644 archives/2018/page/5/index.html create mode 100644 archives/2018/page/6/index.html create mode 100644 archives/2019/03/index.html create mode 100644 archives/2019/04/index.html create mode 100644 archives/2019/06/index.html create mode 100644 archives/2019/index.html create mode 100644 archives/2020/06/index.html create mode 100644 archives/2020/index.html create mode 100644 archives/2021/07/index.html create mode 100644 archives/2021/08/index.html create mode 100644 archives/2021/09/index.html create mode 100644 archives/2021/10/index.html create mode 100644 archives/2021/11/index.html create mode 100644 archives/2021/12/index.html create mode 100644 archives/2021/index.html create mode 100644 archives/2022/02/index.html create mode 100644 archives/2022/05/index.html create mode 100644 archives/2022/06/index.html create mode 100644 archives/2022/07/index.html create mode 100644 archives/2022/09/index.html create mode 100644 archives/2022/10/index.html create mode 100644 archives/2022/11/index.html create mode 100644 archives/2022/index.html create mode 100644 archives/2023/01/index.html create mode 100644 archives/2023/02/index.html create mode 100644 archives/2023/03/index.html create mode 100644 archives/2023/04/index.html create mode 100644 archives/2023/05/index.html create mode 100644 archives/2023/06/index.html create mode 100644 archives/2023/07/index.html create mode 100644 archives/2023/08/index.html create mode 100644 archives/2023/09/index.html create mode 100644 archives/2023/index.html create mode 100644 archives/2023/page/2/index.html create mode 100644 archives/index.html create mode 100644 archives/page/10/index.html create mode 100644 archives/page/11/index.html create mode 100644 archives/page/2/index.html create mode 100644 archives/page/3/index.html create mode 100644 archives/page/4/index.html create mode 100644 archives/page/5/index.html create mode 100644 archives/page/6/index.html create mode 100644 archives/page/7/index.html create mode 100644 archives/page/8/index.html create mode 100644 archives/page/9/index.html create mode 100644 assets/algolia/algoliasearch.js create mode 100644 assets/algolia/algoliasearch.min.js create mode 100644 assets/algolia/algoliasearchLite.js create mode 100644 assets/algolia/algoliasearchLite.min.js create mode 100644 atom.xml create mode 100644 "axios\345\217\221\351\200\201Basic-Auth\350\256\244\350\257\201\345\222\214Bearer-Token.html" create mode 100644 baidusitemap.xml create mode 100644 "centos7\345\256\211\350\243\205MySQL.html" create mode 100644 "centos7\345\256\211\350\243\205mongodb.html" create mode 100644 "centos7\345\274\200\346\234\272\350\207\252\345\220\257nginx.html" create mode 100644 content.json create mode 100644 css/fonts/fontawesome/FontAwesome.otf create mode 100644 css/fonts/fontawesome/fontawesome-webfont.eot create mode 100644 css/fonts/fontawesome/fontawesome-webfont.svg create mode 100644 css/fonts/fontawesome/fontawesome-webfont.ttf create mode 100644 css/fonts/fontawesome/fontawesome-webfont.woff create mode 100644 css/fonts/fontawesome/fontawesome-webfont.woff2 create mode 100644 css/fonts/roboto/Roboto-Bold.eot create mode 100644 css/fonts/roboto/Roboto-Bold.ttf create mode 100644 css/fonts/roboto/Roboto-Bold.woff create mode 100644 css/fonts/roboto/Roboto-Bold.woff2 create mode 100644 css/fonts/roboto/Roboto-Light.eot create mode 100644 css/fonts/roboto/Roboto-Light.ttf create mode 100644 css/fonts/roboto/Roboto-Light.woff create mode 100644 css/fonts/roboto/Roboto-Light.woff2 create mode 100644 css/fonts/roboto/Roboto-Medium.eot create mode 100644 css/fonts/roboto/Roboto-Medium.ttf create mode 100644 css/fonts/roboto/Roboto-Medium.woff create mode 100644 css/fonts/roboto/Roboto-Medium.woff2 create mode 100644 css/fonts/roboto/Roboto-Regular.eot create mode 100644 css/fonts/roboto/Roboto-Regular.ttf create mode 100644 css/fonts/roboto/Roboto-Regular.woff create mode 100644 css/fonts/roboto/Roboto-Regular.woff2 create mode 100644 css/fonts/roboto/Roboto-Thin.eot create mode 100644 css/fonts/roboto/Roboto-Thin.ttf create mode 100644 css/fonts/roboto/Roboto-Thin.woff create mode 100644 css/fonts/roboto/Roboto-Thin.woff2 create mode 100644 css/style.css create mode 100644 "css\345\256\236\347\216\260table\350\241\250\345\244\264\345\222\214\345\210\227\345\233\272\345\256\232.html" create mode 100644 "css\345\256\236\347\216\260\345\205\203\347\264\240\345\236\202\347\233\264\345\261\205\344\270\255-\345\214\205\346\213\254\346\234\252\347\237\245\345\256\275\351\253\230\347\232\204\345\205\203\347\264\240.html" create mode 100644 "css\345\256\236\347\216\260\345\215\225\350\241\214\343\200\201\345\244\232\350\241\214\346\226\207\346\234\254\346\272\242\345\207\272\346\230\276\347\244\272\347\234\201\347\225\245\345\217\267.html" create mode 100644 "ejs\346\250\241\346\235\277\345\274\225\346\223\216.html" create mode 100644 "el-date-picker\346\227\245\346\234\237\350\214\203\345\233\264\350\256\276\347\275\256\351\200\211\346\213\251\345\214\272\351\227\264.html" create mode 100644 "element-ui\351\207\214Table\347\273\204\344\273\266\345\244\232\351\200\211\357\274\214\347\277\273\351\241\265\350\256\260\345\277\206\351\200\211\344\270\255\345\244\215\351\200\211\346\241\206.html" create mode 100644 "express\347\256\200\345\215\225\345\205\245\345\235\221.html" create mode 100644 favicon.ico create mode 100644 "for-in-\345\222\214-for-of-\345\214\272\345\210\253.html" create mode 100644 "fs\346\250\241\345\235\227.html" create mode 100644 "global\345\257\271\350\261\241.html" create mode 100644 hello-world.html create mode 100644 "http\346\250\241\345\235\227.html" create mode 100644 img/alipay.jpg create mode 100644 img/avatar.png create mode 100644 img/brand.jpg create mode 100644 img/cc.png create mode 100644 img/img-err.png create mode 100644 img/img-loading.png create mode 100644 img/wechat.jpg create mode 100644 index.html create mode 100644 "javascript\346\225\260\346\215\256\347\261\273\345\236\213\350\275\254\346\215\242.html" create mode 100644 "javascript\346\225\260\347\273\204\345\216\273\351\207\215-ES6\347\211\210.html" create mode 100644 "javascript\346\225\260\347\273\204\345\216\273\351\207\215.html" create mode 100644 js/main.js create mode 100644 js/main.min.js create mode 100644 js/search.js create mode 100644 js/search.min.js create mode 100644 js/waline.js create mode 100644 js/waline.min.js create mode 100644 "js\345\207\275\346\225\260\351\230\262\346\212\226\345\222\214\350\212\202\346\265\201\347\232\204\345\214\272\345\210\253\345\222\214\344\273\243\347\240\201\345\256\236\347\216\260.html" create mode 100644 "js\346\265\256\347\202\271\350\277\220\347\256\2270-1-0-2-0-30000000000000004.html" create mode 100644 "js\350\216\267\345\217\226\345\233\276\347\211\207\346\226\207\344\273\266\345\256\275\345\272\246\345\222\214\351\253\230\345\272\246.html" create mode 100644 live2dw/assets/koharu.model.json create mode 100644 live2dw/assets/koharu.physics.json create mode 100644 live2dw/assets/moc/koharu.2048/texture_00.png create mode 100644 live2dw/assets/moc/koharu.moc create mode 100644 live2dw/assets/mtn/01.mtn create mode 100644 live2dw/assets/mtn/02.mtn create mode 100644 live2dw/assets/mtn/03.mtn create mode 100644 live2dw/assets/mtn/04.mtn create mode 100644 live2dw/assets/mtn/05.mtn create mode 100644 live2dw/assets/mtn/06.mtn create mode 100644 live2dw/assets/mtn/07.mtn create mode 100644 live2dw/assets/mtn/08.mtn create mode 100644 live2dw/assets/mtn/09.mtn create mode 100644 live2dw/assets/mtn/idle.mtn create mode 100644 live2dw/lib/L2Dwidget.0.min.js create mode 100644 live2dw/lib/L2Dwidget.0.min.js.map create mode 100644 live2dw/lib/L2Dwidget.min.js create mode 100644 live2dw/lib/L2Dwidget.min.js.map create mode 100644 "nativefier-\344\270\200\350\241\214\345\221\275\344\273\244\347\224\237\346\210\220\346\241\214\351\235\242\345\272\224\347\224\250.html" create mode 100644 "node-js-Windows\344\270\213\345\256\211\350\243\205.html" create mode 100644 "node\345\244\204\347\220\206\345\211\215\345\217\260get\350\257\267\346\261\202.html" create mode 100644 "node\345\244\204\347\220\206\345\211\215\345\217\260post\350\257\267\346\261\202.html" create mode 100644 "node\345\256\232\346\227\266\344\273\273\345\212\241.html" create mode 100644 "node\347\210\254\350\231\253.html" create mode 100644 "node\350\277\236\346\216\245MySQL.html" create mode 100644 "npm-install-\346\212\245\351\224\231\346\217\220\347\244\272\350\257\267\344\275\277\347\224\250\347\256\241\347\220\206\345\221\230.html" create mode 100644 "npm\344\275\277\347\224\250\344\273\213\347\273\215.html" create mode 100644 "npm\350\256\276\347\275\256\346\267\230\345\256\235\351\225\234\345\203\217.html" create mode 100644 "nvm\345\210\207\346\215\242node\347\211\210\346\234\254-npm-ERR-Unexpected-token.html" create mode 100644 "nvm\347\256\241\347\220\206node-js\347\211\210\346\234\254\357\274\210Windows\347\263\273\347\273\237\357\274\211.html" create mode 100644 page/10/index.html create mode 100644 page/11/index.html create mode 100644 page/2/index.html create mode 100644 page/3/index.html create mode 100644 page/4/index.html create mode 100644 page/5/index.html create mode 100644 page/6/index.html create mode 100644 page/7/index.html create mode 100644 page/8/index.html create mode 100644 page/9/index.html create mode 100644 "path\346\250\241\345\235\227.html" create mode 100644 "pinia\344\275\277\347\224\250\346\214\207\345\215\227.html" create mode 100644 "pm2\345\274\200\346\234\272\350\207\252\345\220\257.html" create mode 100644 "querystring\346\250\241\345\235\227.html" create mode 100644 robots.txt create mode 100644 sitemap.xml create mode 100644 "stream\346\250\241\345\235\227.html" create mode 100644 tags/API/index.html create mode 100644 tags/COS/index.html create mode 100644 tags/Debian9/index.html create mode 100644 tags/EJS/index.html create mode 100644 tags/ES6/index.html create mode 100644 "tags/EventHub\357\274\214\345\217\221\345\270\203\350\256\242\351\230\205/index.html" create mode 100644 tags/Express/index.html create mode 100644 tags/Express/page/2/index.html create mode 100644 tags/Fail2ban/index.html create mode 100644 tags/Git/index.html create mode 100644 tags/GitHub-Actions/index.html create mode 100644 tags/Hexo/index.html create mode 100644 tags/MongoDB/index.html create mode 100644 tags/MySQL/index.html create mode 100644 tags/Node-js/index.html create mode 100644 tags/Node-js/page/2/index.html create mode 100644 tags/Node-js/page/3/index.html create mode 100644 tags/Promise/index.html create mode 100644 "tags/SSH\345\205\254\351\222\245/index.html" create mode 100644 tags/TypeScript/index.html create mode 100644 tags/VSCode/index.html create mode 100644 tags/Volta/index.html create mode 100644 tags/Waline/index.html create mode 100644 tags/Windows/index.html create mode 100644 tags/apidoc/index.html create mode 100644 tags/axios/index.html create mode 100644 tags/cli/index.html create mode 100644 tags/cloudflare/index.html create mode 100644 tags/cookie/index.html create mode 100644 tags/css/index.html create mode 100644 tags/element-plus/index.html create mode 100644 tags/element-ui/index.html create mode 100644 tags/express-generator/index.html create mode 100644 tags/index.html create mode 100644 tags/javascript/index.html create mode 100644 "tags/javascript\357\274\214clipboard-js/index.html" create mode 100644 tags/nativefier/index.html create mode 100644 tags/nginx/index.html create mode 100644 tags/npm/index.html create mode 100644 tags/pinia/index.html create mode 100644 tags/pm2/index.html create mode 100644 tags/session/index.html create mode 100644 tags/travis-ci/index.html create mode 100644 tags/v2ray/index.html create mode 100644 tags/vercel/index.html create mode 100644 tags/vite/index.html create mode 100644 tags/vue-cli4/index.html create mode 100644 tags/vue2-0/index.html create mode 100644 "tags/vue2-0\357\274\214clipboard-js/index.html" create mode 100644 tags/vue3-0/index.html create mode 100644 tags/webpack/index.html create mode 100644 tags/yarn/index.html create mode 100644 "tags/\344\272\213\344\273\266\345\247\224\346\211\230/index.html" create mode 100644 "tags/\344\272\221\344\270\273\346\234\272/index.html" create mode 100644 "tags/\345\256\232\346\227\266\344\273\273\345\212\241/index.html" create mode 100644 "tags/\346\211\223\345\214\205\345\267\245\345\205\267/index.html" create mode 100644 "tags/\346\214\201\347\273\255\351\233\206\346\210\220/index.html" create mode 100644 "tags/\346\225\260\346\215\256\347\261\273\345\236\213\350\275\254\346\215\242/index.html" create mode 100644 "tags/\346\225\260\347\273\204/index.html" create mode 100644 "tags/\346\226\207\344\273\266\344\270\212\344\274\240/index.html" create mode 100644 "tags/\347\202\271\351\200\217/index.html" create mode 100644 "tags/\347\210\254\350\231\253/index.html" create mode 100644 "tags/\347\224\237\345\221\275\345\221\250\346\234\237/index.html" create mode 100644 "tags/\347\247\273\345\212\250\347\253\257/index.html" create mode 100644 "tags/\347\273\204\345\220\210\345\274\217API/index.html" create mode 100644 "tags/\350\207\252\345\212\250\346\236\204\345\273\272/index.html" create mode 100644 "tags/\350\242\253\345\242\231/index.html" create mode 100644 "tags/\350\256\276\350\256\241\346\250\241\345\274\217/index.html" create mode 100644 "tags/\350\267\257\347\224\261/index.html" create mode 100644 "tags/\351\203\250\347\275\262/index.html" create mode 100644 "tags/\351\235\242\350\257\225\351\242\230/index.html" create mode 100644 "tags/\351\252\250\346\236\266\345\261\217/index.html" create mode 100644 "url\346\250\241\345\235\227.html" create mode 100644 "vite\347\203\255\346\233\264\346\226\260\346\212\245\351\224\231.html" create mode 100644 "vue-cli3\350\256\276\347\275\256\351\273\230\350\256\244\346\211\223\345\274\200\346\265\217\350\247\210\345\231\250.html" create mode 100644 "vue-cli4\351\205\215\347\275\256\347\224\237\344\272\247\347\216\257\345\242\203\345\210\240\351\231\244console-log.html" create mode 100644 "vue3\344\270\255\345\274\225\345\205\245element-plus\347\232\204Icon.html" create mode 100644 "vue3\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.html" create mode 100644 "vue\344\277\256\346\224\271UI\345\272\223\347\273\204\344\273\266\346\240\267\345\274\217.html" create mode 100644 "vue\347\232\204\347\224\237\345\221\275\345\221\250\346\234\237.html" create mode 100644 "webpack4-0\345\205\245\351\227\250\346\214\207\345\215\227\357\274\210\344\272\214\357\274\211\350\275\254\346\215\242es7\350\257\255\346\263\225\350\247\243\346\236\220\351\235\231\346\200\201\350\265\204\346\272\220.html" create mode 100644 "webpack\345\205\245\351\227\250\346\214\207\345\215\227.html" create mode 100644 "webpack\345\206\205\345\255\230\346\272\242\345\207\272.html" create mode 100644 "yarn\344\275\277\347\224\250\344\273\213\347\273\215.html" create mode 100644 "\344\273\200\344\271\210\346\230\257Node-js.html" create mode 100644 "\344\273\216Travis-CI\350\277\201\347\247\273\345\210\260GitHub-Actions.html" create mode 100644 "\344\275\277\347\224\250-Volta-\347\256\241\347\220\206Node.html" create mode 100644 "\344\275\277\347\224\250Express\345\274\200\345\217\221\345\260\217\350\257\264API\346\216\245\345\217\243\346\234\215\345\212\241-\344\272\214.html" create mode 100644 "\344\275\277\347\224\250Express\345\274\200\345\217\221\345\260\217\350\257\264API\346\216\245\345\217\243\346\234\215\345\212\241.html" create mode 100644 "\344\275\277\347\224\250Express\345\274\200\345\217\221\345\260\217\350\257\264API\346\216\245\345\217\243\346\234\215\345\212\2411-0\357\274\210\344\270\211\357\274\211.html" create mode 100644 "\344\275\277\347\224\250apidoc\346\226\207\346\241\243\347\245\236\345\231\250\357\274\214\345\277\253\351\200\237\347\224\237\346\210\220api\346\226\207\346\241\243.html" create mode 100644 "\344\275\277\347\224\250express-generator\345\277\253\351\200\237\347\224\237\346\210\220express\345\272\224\347\224\250.html" create mode 100644 "\344\275\277\347\224\250travis-ci\350\207\252\345\212\250\346\236\204\345\273\272Hexo.html" create mode 100644 "\345\210\207\346\215\242node\347\211\210\346\234\254\351\241\271\347\233\256Saas\346\212\245\351\224\231.html" create mode 100644 "\345\217\221\345\270\203\344\270\200\344\270\252\350\207\252\345\267\261\347\232\204NPM\345\214\205.html" create mode 100644 "\345\233\275\345\206\205\345\255\246\347\224\237\344\272\221\344\270\273\346\234\272\344\274\230\346\203\240\346\225\264\347\220\206.html" create mode 100644 "\345\234\250vue\344\275\277\347\224\250clipboard-js.html" create mode 100644 "\346\211\213\345\206\231EventHub-\345\217\221\345\270\203\350\256\242\351\230\205.html" create mode 100644 "\346\211\213\345\206\231Promise-allsettled\346\226\271\346\263\225.html" create mode 100644 "\346\211\213\345\206\231Promise-race\346\226\271\346\263\225.html" create mode 100644 "\346\211\213\345\206\231Promsie-all\346\226\271\346\263\225.html" create mode 100644 "\346\211\213\345\206\231bind\343\200\201call\343\200\201apply\346\226\271\346\263\225\345\256\236\347\216\260.html" create mode 100644 "\346\211\213\345\206\231vue\346\227\245\345\216\206\347\273\204\344\273\266.html" create mode 100644 "\346\211\213\345\206\231\347\256\200\346\230\223Promise.html" create mode 100644 "\346\213\257\346\225\221\350\242\253\345\242\231\347\232\204ip-v2ray\344\275\277\347\224\250cloudflare\344\270\255\350\275\254\346\265\201\351\207\217.html" create mode 100644 "\347\247\273\345\212\250\347\253\257js\345\244\215\345\210\266\345\206\205\345\256\271\345\210\260\345\211\252\350\264\264\346\235\277.html" create mode 100644 "\347\273\231\351\241\271\347\233\256\345\212\240\344\270\200\344\270\252\351\252\250\346\236\266\345\261\217\345\220\247.html" create mode 100644 "\350\247\243\345\206\263Waline\346\234\215\345\212\241\345\233\240vercel\345\233\275\345\206\205\350\242\253\345\242\231\346\227\240\346\263\225\344\275\277\347\224\250.html" create mode 100644 "\350\247\243\345\206\263node-sass\345\256\211\350\243\205\345\244\261\350\264\245.html" create mode 100644 "\350\247\243\345\206\263\347\247\273\345\212\250\347\253\257click\344\272\213\344\273\266300\346\257\253\347\247\222\345\273\266\350\277\237\345\222\214\347\202\271\351\200\217\351\227\256\351\242\230.html" create mode 100644 "\351\203\250\347\275\262\345\260\217\350\257\264api\346\234\215\345\212\241\345\210\260\350\205\276\350\256\257\344\272\221.html" diff --git a/404.html b/404.html new file mode 100644 index 000000000..6b43d6ee5 --- /dev/null +++ b/404.html @@ -0,0 +1,382 @@ + + +
+ + + + + + + + + + + + + + + + + + + +在 ECMAScript 2015 (ES6) 引入 TypedArray 之前,JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。
Buffer 类在 Node.js 中是一个全局变量,因此无需使用 require(‘buffer’)。
Buffer对象类似于数组,它的元素为16进制的两位数,即0到255的数值。
1 | // 创建一个长度为 10、且用 0 填充的 Buffer。 |
在 Node.js v6 之前的版本中Buffer 实例是通过 new Buffer 构造函数创建的,因为 new Buffer() 的行为会根据所传入的第一个参数的值的数据类型而明显地改变,所以如果应用程序没有正确地校验传给 new Buffer() 的参数、或未能正确地初始化新分配的 Buffer 的内容,就有可能在无意中为他们的代码引入安全性与可靠性问题。
为了使 Buffer 实例的创建更可靠、更不容易出错,各种 new Buffer() 构造函数已被 废弃,并由 Buffer.from()、Buffer.alloc()、和 Buffer.allocUnsafe() 方法替代。
Node.js 建议开发者们应当把所有正在使用的 new Buffer() 构造函数迁移到这些新的 API 上。
Buffer对象与普通的 JavaScript 字符串的互相转换,需要指定编码格式。目前Node.js 目前支持以下的字符编码。
1 | // 字符串转Buffer |
Buffer.from(string[, encoding])
encoding 不传参数会默认utf8编码进行转码和存储。
实例方法
buf.toString([encoding[, start[, end]]])
encoding 解码使用的字符编码。默认: ‘utf8’。
start 开始解码的字节偏移量。默认: 0。
end 结束解码的字节偏移量(不包含)。 默认: buf.length。
注:如果Buffer对象由多种编码写入,就需要在局部指定定不同的编码,才能转换回正常的编码。
Buffer.isBuffer(obj)
如果 obj 是一个 Buffer 则返回 true ,否则返回 false 。
1 | const buf1 = Buffer.alloc(10); |
Buffer.concat(list[, totalLength])
list <Array> 要合并的 Buffer 或 Uint8Array 实例的数组
totalLength <integer> 合并时 list 中 Buffer 实例的总长度
返回一个合并了 list 中所有 Buffer 实例的新建的 Buffer 。
如果 list 中没有元素、或 totalLength 为 0 ,则返回一个新建的长度为 0 的 Buffer 。
如果没有提供 totalLength ,则从 list 中的 Buffer 实例计算得到。 为了计算 totalLength 会导致需要执行额外的循环,所以提供明确的长度会运行更快。
如果提供了 totalLength,totalLength 必须是一个正整数。如果从 list 中计算得到的 Buffer 长度超过了 totalLength,则合并的结果将会被截断为 totalLength 的长度。
1 | const buf1 = Buffer.from('蓝'); |
Buffer.byteLength(string[, encoding])
encoding 不传参数会默认utf8编码
1 | console.log(Buffer.byteLength('蓝胖')) |
+ ++ + + + + ++ + + + http://blog.langpz.com/Buffer对象.html + ++ + +
fail2ban是一款入侵防御软件,可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作。可以防止别人恶意扫描和暴力破解SSH密码。
Python2 >= 2.7 or Python >= 3.2
1 | // 更新系统 |
vi /etc/fail2ban/jail.conf
1 | [DEFAULT] |
vi /etc/fail2ban/jail.d/jail-debian.local
1 | [sshd] |
以上配置都保存后执行重启命令
1 | systemctl restart fail2ban |
systemctl start fail2ban
systemctl stop fail2ban
systemctl restart fail2ban
fail2ban-client set sshd unbanip 1.1.2.2(要解禁的IP)
fail2ban-client status sshd
service fail2ban status
+ ++ + + + + ++ + + + http://blog.langpz.com/Debian9安装设置Fail2ban.html + ++ + +
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
首先说说var声明变量的弊端。
1.可以重复声明
2.无法限制修改
3.没有块级作用域
4.变量会被提升
let不可以重复声明。
1 | let a = 2; |
如果重复声明会直接报错。
let有块级作用域。
1 | { |
会报错 a is not defined。
let不存在变量提升。
1 | console.log(a) |
会打印出 a undefined b is not defined。
const常量是不可以被修改的。
1 | const a = 'lanpangzhi'; |
修改会直接报错,但是如果是对象数据类型可以在对象下添加新得属性。
1 | const a = {}; |
这样写不会报错,常量a存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把a指向另一个地址,但对象本身是可变的,所以依然可以为其添加新属性。
const不可以重复声明。
1 | const a = 2; |
如果重复声明会直接报错。
const有块级作用域。
1 | { |
会报错 a is not defined。
const不存在变量提升。
1 | console.log(a) |
会打印出 a undefined b is not defined。
让i从0输出到5,按顺序输出,es5版本需要闭包来实现。
1 | for (var i = 0; i <= 5; i++){ |
es6版本
1 | for (let i = 0; i <= 5; i++){ |
let和const解决了var的弊端,瞬间开发变简单了很多。
+ ++ + + + + ++ + + + http://blog.langpz.com/ES6系列-let和const变量.html + ++ + +
之前文章写了怎么用body-parser中间件处理post请求,今天就大概实现下body-parser中urlencoded 这个方法。
首先通过命令提示输入 mkdir lib && cd lib。
再输入touch body-parser.js。
把下面的代码在body-parser.js 敲一遍。
1 | // lib/body-parser.js |
下面是主程序代码。
1 | // app.js |
现在就完成和body-parser中间件类似的功能了,req.body上面有请求过来的post数据。
++ + + + ++ + + + + +
之前文章里面介绍了如何用原生Node处理数据请求。
现在通过Express框架处理post和get请求。
这个比较简单(不需要使用中间件)直接req.query就能获取到。
1 | // 服务端代码 |
1 | // 客户端代码 |
用命令提示行运行服务器,打开刚才写好的网页输入内容提交表单。
就可以获取到一个json对象如 { user: ‘123’, pass: ‘abc’ } 方便操作。
处理post请求需要用到body-parser这个中间件。
这个中间件可以解析JSON、Raw、文本、URL-encoded格式的请求体。
先安装中间件
1 | npm install body-parser |
在项目中引用body-parser中间件。
1 | // 服务端代码 |
1 | // 客户端代码 |
用命令提示行运行服务器,打开刚才写好的网页输入内容提交表单。
就可以获取到一个json对象如 { user: ‘lanpangzhi’, pass: ‘123456’ } 方便操作。
这样我们就通过Express获取到get和post提交过来的数据了。
urlencoded() 方法配置参数 (options)
body-parser里面还有另外几个方法,可以自行去github看下。
+ ++ + + + + ++ + + + http://blog.langpz.com/Express处理数据请求.html + ++ + +
在后台项目中会经常碰见文件上传这个需求,例如用户上传一张头像等。。。今天就用Multer这个中间件来解决文件上传。
第一步先安装Multer到你的项目里。
1 | npm install --save multer |
这里就不用ajax去上传了。
1 | // index.html |
值 | 说明 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data | 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |
1 | // app.js |
在cmd执行 node app.js 打开index.html 选择文件上传,服务端就可以成功接收文件了。
multer 还有一些别的方法和参数,可自行去github查看。
+ ++ + + + + ++ + + + http://blog.langpz.com/Express文件上传.html + ++ + +
HTTP协议是无状态的,所以要通过一些机制来记录用户的信息。cookie是存在浏览器端的,session是存在服务器端。
cookie存在浏览器端,每次请求都会带上。
缺点:不安全(用户可以随便串改),大小(4k)。
session只存在服务器端。
优点:容量不限,比较安全(用户接触不到)。
session实现是基于cookie的。
风险:session_id 被泄露漏 session劫持。
提醒用户不在在控制台输入(console)输入代码。
session_id 足够复杂,定期更换。
先安装cookie-parser。
1 | npm install cookie-parser -S |
1 | // app.js |
在cmd执行 node app.js 浏览器输入http://localhost:8000/ 第一次控制台输出{},再刷新就输出{user: ‘lanpangzhi’ }。
现在就能获取和设置cookie了,但是有个问题,浏览器执行document.cookie = “user=aaa”,浏览器再刷新控制台就会输出{user: ‘aaa’ }。
这样使用cookie不安全,敏感信息容易被篡改,所以要使用带签名的cookie。
带签名的cookie
1 | // app.js |
再执行,就会发现浏览器cookie的值变成了s%3Alanpangzhi.i6hEUuhD%2Fd0miBMsGyRdktiDFmi%2BYfiJhQTcqKpQqIc ,再修改cookie的值,控制台就会输出{ user: false },这样cookie就不会被简单的篡改了。
req.cookies 获取cookie。
res.cookie(name, value [, options]);
name: cookie的名称(string)。
value: cookie的值,(string or object)。
options:options参数是一个可以具有以下属性的对象。
值 | 类型 | 说明 |
---|---|---|
domain | String | cookie的域名。 默认为网站的域名。 |
encode | Function | 用于cookie值编码的同步函数。 默认为encodeURIComponent。 |
expires | Date | cookie的有效期(如果未指定或设置为0),则创建会话cookie。 |
httpOnly | Boolean | 将cookie标记为仅可由Web服务器访问。默认false |
maxAge | Number | 设置cookie的到期时间、相对于当前时间的到期时间(以毫秒为单位)。 |
path | String | cookie的路径。 默认为“/” |
secure | Boolean | 将cookie标记为仅与HTTPS一起使用。默认false |
signed | Boolean | 对cookie进行签名。默认false |
先安装cookie-session。
1 | npm install cookie-session -S |
1 | // app.js |
在cmd执行 node app.js 浏览器输入http://localhost:8000/ 刷新浏览器就可以看到访问几次,把所有浏览器都关闭session就失效了,再进入页面就从第一次开始了。
更多方法还有详细参数可以去github自行参考。
http://expressjs.com/en/4x/api.html
https://github.com/expressjs/cookie-parser
https://github.com/expressjs/cookie-session
+ + + + ++ + + + + +
之前在Express入坑里面简单讲了下路由的用法,现在就讲下如果再项目中怎么配置路由。
一个网站下面可能有很多地址例如:
www.langpz.com/aaa
user/
www.langpz.com/user/aaa
www.langpz.com/user/bbb
www.langpz.com/user/ccc
vip/
www.langpz.com/vip/aaa
www.langpz.com/vip/bbb
www.langpz.com/vip/ccc
等等。。。
咱们可以拆分成vip和user两个目录目录下再放子路由。
先安装express 然后在项目根目录建一个app.js和routers文件夹,routers文件夹里面再建一个index.js文件和vip、user两个目录,两个目录下面分别建立index.js文件。
1 | // app.js |
1 | // routers/index.js |
1 | // routers/vip/index.js |
1 | // routers/user/index.js |
然后执行 node app.js 再浏览器输入http://localhost:8000/user/aaa、http://localhost:8000/vip/aaa,就可以来回切换路由了,如果新增了一个路由模块就在routers文件夹下,再新建文件夹划分路由,这样路由文件比较清晰,后期维护起来也方便。
++ ++ + + + + ++ + + + http://blog.langpz.com/Express路由.html + ++ + +
经常会碰见拉取远端的分支到本地,步骤和命令经常记不住所以只好做个笔记。
首先你得先查看你是否和远端的仓库建立连接。
1 | git remote -v |
如果没有的话那就自行添加一下
1 | git remote add origin xxxx(你远程分支的git仓库地址) |
如果每天要提交代码 ,可以绕过上面这一步,直接切换分支
1 | git checkout -b Q3 origin/Q3 |
这个时候操作失败提示如下:
可以执行 git branch -r 来检查本地是否有Q3远程分支。
拉取远程分支到本地并切换分支。
1 | git fetch origin Q3 |
拉取远程分支到本地
1 | git pull origin Q3 |
https://curder.gitbooks.io/blog/git/remote_repository_pull.html
++ ++ + + + + ++ + + + http://blog.langpz.com/Git拉取远程分支到本地.html + ++ + +
在工作中会碰见这个功能不要了,回退到上一个版本、或者merge错分支,下面简单记录下如何解决这些问题。
1 | git log |
git log 查看之前提交的commit版本号,然后执行回退。
1 | git reflog |
git reflog 查看之前执行命令版本号,然后执行回退。
还有一种场景, 比如有三个commit,保留1和3,2舍去这个时候就要用到 cherry-pick
1 | git reflog |
git reflog 找到commit 1和3的版本号 回退到第一个版本,然后再执行cherry-pick把3的修改合并到1里,如果有冲突就解决冲突。
1 | git reset --hard 版本号 |
先回退版本,然后强制推送到远端仓库。
++ ++ + + + + ++ + + + http://blog.langpz.com/Git版本回退.html + ++ + +
大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。 首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。
1 | cd ~/.ssh |
或者 C:\Users\Administrator.ssh 访问这个目录。
看有没有用 something 和 something.pub 来命名的一对文件,这个 something 通常就是 id_dsa 或 id_rsa。有 .pub 后缀的文件就是公钥,另一个文件则是密钥。如果有公钥直接打开 id_rsa.pub 文件添加到GitHub和coding的SSH公钥里面,建议coding有效期选永久。
执行下面的命令。
1 | ssh-keygen |
它先要求你确认保存公钥的位置(.ssh/id_rsa),然后它会让你重复一个密码两次,如果不想在使用公钥的时候输入密码,可以留空。
直接回车就行。
然后去C:\Users\Administrator.ssh目录 找到id_rsa.pub 文件就是生成好的公钥,添加到GitHub和coding。
公钥的大概样子,全部复制。
1 | ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU |
测试GitHub。
1 | ssh git@github.com |
现在就添加成功了。
测试Coding
1 | ssh -T git@git.coding.net |
+ ++ + + + + ++ + + + http://blog.langpz.com/Git生成SSH公钥.html + ++ + +
我们如果是通过git clone https://xxx 下载的项目每次Push的时候需要输入用户名和密码,其实Git可以通过配置实现免密码提交。
+
在Git Bash 里面输入命令。
1 | git config --global credential.helper store |
然后再提交输入用户名和密码提交完成后,用户名和密码就被保存了,下次再提交就不用再输入了。
++ ++ + + + + ++ + + + http://blog.langpz.com/Git配置https免用户名和密码提交.html + ++ + +
起因Swiftype现在收费了,也没有免费版本。Local Search搜索体验不好,微搜索Next官网上描述太少!所以选择Algolia。
注:Algolia搜索在版本 5.1.0 中引入,要使用此功能请确保所使用的 NexT 版本在此之后
Algolia 登陆页面https://www.algolia.com/users/sign_in,可以使用 GitHub 或者 Google 账户直接登录,也可以注册一个新账户。我直接用谷歌账户登陆了,注册后的 14 天内拥有所有功能(包括收费类别的)。之后若未续费会自动降级为免费账户,免费账户 总共有 10,000 条记录,每月有 100,000 的可以操作数。
Index 创建完成后,此时这个 Index 里未包含任何数据。 接下来需要安装 Hexo Algolia 扩展, 这个扩展的功能是搜集站点的内容并通过 API 发送给 Algolia。前往站点根目录,执行命令安装:
1 | npm install hexo-algolia --save # 目前最新版本是1.2.4,下面的操作都是基于这个版本的文档 |
前往站点根目录打开_config.yml添加以下代码
1 | # Algolia Search API Key |
选中后保存。
1 | export(windows 为 set) (Powershell 用 $env:) HEXO_ALGOLIA_INDEXING_KEY=你的Search-Only API key |
更改Next主题配置文件,找到 Algolia Search 配置部分:
1 |
|
将 enable 改为 true 即可,根据需要你可以调整 labels 中的文本。这个是我修改的文本。
原因:Algolia Search API Key indexName 错了
解决方案:看下之前新建index的名字
原因:没有修改Algolia搜索ACL(访问控制列表)
解决方案: 按1.4操作勾选上就可以
原因:遮罩的z-index值太高,我的next主题是5.1.3版本可能其他版本没有这个BUG
解决方案: 找到\themes\next\source\css_common\components\third-party 下面的algolia-search.styl 文件 第8行追加
1 | +mobile() |
http://theme-next.iissnan.com/third-party-services.html#algolia-search
https://github.com/oncletom/hexo-algolia
+ ++ + + + + ++ + + + http://blog.langpz.com/Hexo-Next集成Algolia搜索.html + ++ + +
最近coding的Pages 服务一直不稳定,这两天访问还出现404,重新部署也无法解决。国内访问GitHub Pages 不是很快,而且百度SEO也爬不到。码云自定义域名收费,只好迁移到腾讯云COS上了。
https://console.cloud.tencent.com/cos5/bucket 首先要创建存储桶。区域看各自情况任选,访问权限必须要选择公有读私有写。
基础设置
开启静态网站索引文档一定要填index.html,错误文档就看自定义的是什么文件了。
域名管理
开启自定义加速域名(CDN加速)填写上自己的域名就可以了。
在域名解析这里添加上刚才配置的自定义加速域名的CNAME地址。
1 | npm install hexo-deployer-cos-enhanced-dev --save |
把之前deploy的配置替换掉
1 | deploy: |
secretId
secretKey
包括cdnConfig下面这两个字段都可以不用填写, 直接从环境变量取
type
: 是固定死的,只能是 cos。
cdnUrl
: 是你的对象存储绑定的CDN域名,没有启用 CDN的话,推荐使用 https://github.com/sdlzhd/hexo-deployer-cos
bucket
和 region
: 在腾讯云的对象存储中,新建或找到你的 bucket,然后找到 默认域名 信息,会看到一个类似这样的域名: blog-1251123456.cos.ap-shanghai.myqcloud.com
,第一个点前面的 blog-1251123456
就是 bucket
名称,第二个点和第三个点之间的 ap-shanghai
,就是你的 COS 所在地域,填写到 region
中。
secretId
和 secretKey
:在 COS控制台中,找到左侧的密钥管理,点进去,按照提示添加子账号,并设置秘钥。同时要给子账号赋予 COS相关的权限,还有CDN刷新的权限。不会配置的可以参考 官方示例
1 | hexo d |
直接就发布到腾讯云COS上了,访问速度相当快,对SEO也好。
我的博客使用Travis CI,而且备份也是在GitHub公开仓库, secretId
secretKey
这两个字段我只能写到Travis CI环境变量里面。
1 | script |
只需要在.travis.yml 文件 script 下面加 hexo d 全局变量增加SecretId和SecretKey 这两个变量。
+ + + + ++ + + + + +
搭完博客,发现只有公司电脑上有源文件,如果回家就没发继续更新博客了。也不能拿着U盘到处拷贝。所以就把博客源文件放到github上解决同步问题。
在博客根目录执行
1 | git init |
这就成功了,github上已经有博客的源文件了。
推荐把hexo设置为默认分支。
因为之前是直接把第三方主题克隆到博客目录,有什么改动是无法推送到作者Git仓库的,这个时候需要把第三方主题的项目Fork到自己仓库,自己账号下生成一个同名的仓库,并对应一个url,我们应该git clone自己账号下仓库的url。
执行如下操作。
1 | git submodule add git@github.com:lanpangzhi/hexo-theme-next.git themes/next |
把自己仓库下面第三方主题添加到Git子模块, 注 : themes/next 这里的目录是因为我用的next主题才会写themes/next 如果你用的不是next请把next替换成你的第三方主题文件夹名字。
博客的根目录会多一个.gitmodules文件,这是一个配置文件,保存了项目 URL 和你拉取到的本地子目录。
这就添加成功了,然后执行如下操作。
1 | git add . # 所有变化提交到暂存区 |
电脑上一定要先node和git,执行如下操作。
1 | npm install hexo-cli -g # 先安装hexo的脚手架 |
剩下的就自行操作了。博客已经完成了同步。
注:每次写完文章部署网站后,记得再执行如下操作。
1 | git add . # 所有变化提交到暂存区 |
在博客根目录执行如下操作。
1 | git submodule init # 初始化本地配置文件 |
如果第三方主题有修改的,修改完成后在第三方主题目录执行。
1 | git add . # 所有变化提交到暂存区 |
这样就会把修改的主题推送到自己的仓库。
这样就实现多端同步了。
http://devtian.me/2015/03/17/blog-sync-solution
https://git-scm.com/book/zh/v1/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97
+ ++ + + + + ++ + + + http://blog.langpz.com/Hexo博客多端同步问题.html + ++ + +
事件委托是JavaScript中常用的一种事件处理方式,也称为事件代理。它可以让我们在处理多个相似元素事件时,减少重复代码,提高性能和代码可维护性。
事件委托的原理是将事件绑定在元素的祖先元素上,然后通过事件冒泡的机制,把事件传播到目标元素。
1 | <ul id="a"> |
给每个li添加一个click事件,如果数量过多每个LI都会添加事件这样会添加N个事件。
1 | <ul id="aa"> |
通过把事件委托到祖先元素上冒泡机制触发,然后再判断用户是不是点击的是li再执行某些操作。但是这样写会有一个问题,li里面又包了一个span标签再点击li里面的span就不会再执行某些操作。
1 | <ul id="aaa"> |
最终版利用Element.matches()来匹配。
onEvent函数 最后封装好的方法
减少了DOM操作次数,提高了性能。事件委托利用事件冒泡机制,将事件绑定在父元素上,可以在子元素触发事件时进行响应,避免了对每个子元素都绑定事件的开销,减少了DOM操作次数,提高了性能。
动态监听绑定事件,减少代码量。在动态添加子元素时,如果采用传统的事件绑定方式,需要对每个新添加的子元素都进行事件绑定操作,代码量会非常大。而事件委托只需要在父元素上绑定一次事件即可。
事件委托无法处理一些不能冒泡的事件,例如focus、blur等,需要对这些事件进行单独处理。
调试比较复杂,不容易确定监听者。因为所有子元素的事件都被绑定在一个父元素上。
+ ++ + + + + ++ + + + http://blog.langpz.com/JavaScript的事件委托原理.html + ++ + +
Nodemailer是一个用于 Node.js 应用程序的模块,可以轻松发送电子邮件。支持Windows系统,使用要求Node.js v6.0.0或更新版本。
1 | yarn add nodemailer |
这里使用qq邮箱发送邮件,开启SMTP教程
1 | const nodemailer = require('nodemailer'); |
更多使用方法参考文档
+ + + + ++ + + + + +
JavaScript没有模块系统、标准库比较少、没有标准接口、缺乏包管理系统。
所以JavaScript社区提出了commonjs规范来解决这些问题。
一个Node应用由模块组成,每个js文件就是一个独立模块。
npm基于commonjs实现包的管理使我们开发Node.js更方便。
在commonjs规范中,定义了 require() 方法,这个方法接受一个模块的标识。
1 | var math = require('math'); |
模块有自己的作用域。在模块里面定义的变量、函数、类,都是私有的,对其他文件不可见。
上下文中提供了一个 exports 对象可以导出当前模块的方法或者变量,并且它是唯一导出的出口。在模块中,还存在一个 module 对象,它代表当前模块,exports 是 module 的属性。
1 | // math.js |
再新建一个文件就可以用 require()引用这个模块了
1 | // app.js |
模块标识就是传递给 require() 方法的参数,它必须是符合小驼峰命名的规范,或者以 .. 开头的相对路径,或者绝对路径。它可以没有文件后缀名.js。
加载模块后会被缓存,多次加载还是同一个对象。
查看模块缓存 require.cache
查看模块绝对路径 require.resolve(./math.js)
删除模块的缓存 require.cache[require.resolve(./math.js)]
1 | // a.js |
当 main.js 加载 a.js 时,a.js 又加载 b.js。 此时,b.js 会尝试去加载 a.js。 为了防止无限的循环,会返回一个 a.js 的 exports 对象的 未完成的副本 给 b.js 模块。 然后 b.js 完成加载,并将 exports 对象提供给 a.js 模块。
当 main.js 加载这两个模块时,它们都已经完成加载。 因此,该程序的输出会是:
1 | node main.js |
module.children 被该模块引用的模块对象。
module.id 模块的标识符。 通常是完全解析后的文件名。
module.parent 最先引用该模块的模块。
module.paths 模块的搜索路径。
… 更多去官网查询
在Node中,模块分为两类:一类是Node提供的模块,称为核心模块。另外一类是用户编写的模块,称为文件模块。
核心模块定义在 Node.js 源代码的 lib/ 目录下。
require() 总是会优先加载核心模块。 例如,require(‘http’) 始终返回内置的 HTTP 模块,即使有同名文件。
exports是module.exports对象的引用
1 | function require(/* ... */) { |
+ ++ + + + + ++ + + + http://blog.langpz.com/Node模块机制.html + ++ + +
TypeScript(简称 TS)是一种由微软开发的开源编程语言,它是 JavaScript 的超集。这意味着 TypeScript 扩展了 JavaScript,为其添加了额外的功能,最主要的是类型系统。TypeScript 的目标是提供更强大、更安全、更可维护的代码,同时与 JavaScript 保持高度的兼容性。
JavaScript 是一门非常灵活的动态类型语言,但这也意味着在编写大型应用程序时可能会出现一些潜在的问题:
类型错误: 在运行时才能发现的类型错误可能会导致应用程序崩溃或产生不可预测的行为。
代码维护困难: 在大型项目中,难以理解的变量命名和函数签名可能会导致代码难以维护。
缺少工具支持: 缺乏类型信息可能导致开发工具无法提供有用的代码补全、重构和错误检查。
TypeScript 解决了这些问题,通过引入静态类型检查来增加代码的可靠性和可维护性。它使开发人员能够在开发阶段捕获类型错误,提供了更多的代码提示和智能感知,并提高了代码的可读性。
静态类型检查: TypeScript 允许开发人员在编写代码时指定变量、参数和返回值的类型。这样,在编译时就可以检测到类型错误,而不是在运行时出现错误。
强大的工具支持: TypeScript 受益于强大的开发工具,如编辑器(如VSCode、WebStorm)和构建工具(如Webpack)。这些工具提供了智能感知、代码补全、重构和错误检查等功能。
增强的可读性: TypeScript 代码通常更具可读性,因为类型信息使得代码的意图更加明确。这有助于团队合作和代码维护。
渐进式采用: 你可以将 TypeScript 逐步引入项目中,而不需要从头开始重写代码。它兼容现有的 JavaScript 代码,并允许你逐渐添加类型注解。
社区支持: TypeScript 有一个庞大的社区,提供了丰富的文档、库和工具,以帮助你更好地使用它。
全局安装typescript对TS进行编译
1 | npm install typescript -g |
1 | tsc # 可以将ts文件编译成js文件 |
初始化项目并安装依赖
1 | npm init |
初始化TS配置文件
1 | npx tsc --init |
修改tsconfig.json文件module: “module”: “ESNext”
rollup配置文件
1 | // rollup.config.js |
创建 /public/index.html 和 src/main.ts文件
1 | // /public/index.html |
1 | let a:string = '123' |
package.json配置
1 | "scripts": { |
我们可以通过npm run dev启动服务来使用typescript。
++ ++ + + + + ++ + + + http://blog.langpz.com/TypeScript简介.html + ++ + +
我们在写js的时候需要调试打开浏览器按F12(开发者工具)就可以打断点去看程序写得对不对。但是在node.js里面就没有办法了,因为是在命令行执行的没法打断点一个个console的话效率太低,所以这个时候就需要VSCode来辅助我们开发node.js。
https://code.visualstudio.com/下载对应系统的安装包
打开VSCode新建一个文件夹hello,在里面再新建一个app.js
app.js的代码
1 | for (let index = 0; index < 5; index++) { |
再点调试,快捷键(Ctrl+Shift+D),添加配置选择Node.js。
注: “program”: “${workspaceFolder}/app.js” /app.js 可以是任何名字,但是一定要是你入口文件。
开始打断点。
操作和浏览器调试类似。
+ ++ + + + + ++ + + + http://blog.langpz.com/VSCode-配置Node调试环境.html + ++ + +
组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。组合式 API 是Vue 3 及 Vue 2.7 的内置功能。对于更老的 Vue 2 版本,可以使用官方维护的插件 @vue/composition-api。
Vue3并没有强制必须要使用组合式 API (Composition API) 在Vue3中还是可以使用 选项式(Options API)的写法。
组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。它是一个概括性的术语,涵盖了以下方面的 API:
响应式 API:例如 ref() 和 reactive(),使我们可以直接创建响应式状态、计算属性和侦听器。
生命周期钩子:例如 onMounted() 和 onUnmounted(),使我们可以在组件各个生命周期阶段添加逻辑。
依赖注入:例如 provide() 和 inject(),使我们可以在使用响应式 API 时,利用 Vue 的依赖注入系统。
1 | <script> |
1 | <script setup> |
通过上面的例子相同的业务逻辑,组合式 API 里面同一个逻辑关注点相关的代码被归为了一组:我们无需再为了一个逻辑关注点在不同的选项块间来回滚动切换。此外,我们现在可以很轻松地将这一组代码移动到一个外部文件中,不再需要为了抽象而重新组织代码,大大降低了重构成本,这在长期维护的大型项目中非常关键。
在 setup() 函数中手动暴露大量的状态和方法非常繁琐。幸运的是,我们可以通过使用构建工具来简化该操作。当使用单文件组件(SFC)时,我们可以使用 <script setup> 来大幅度地简化代码。
1 | import { reactive } from 'vue' |
1 | <script setup> |
接受一个内部值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value。如果在 <template> 可以不用写.value
1 | const count = ref(0) |
给ref传一个对象内部会去调用reactive()
返回一个对象的响应式代理。
1 | const state = reactive({ |
基于响应式对象上的一个属性,创建一个对应的 ref。这样创建的 ref 与其源属性保持同步:改变源属性的值也会同步关联修改。
1 | const state = reactive({ |
将一个响应式对象转换为一个普通对象,这个普通对象的每个属性都是指向源对象相应属性的 ref。每个单独的 ref 都是使用 toRef() 创建的。
1 | const state = reactive({ |
接受一个 getter 函数,返回一个只读的响应式 ref 对象。该 ref 通过 .value 暴露 getter 函数的返回值。它也可以接受一个带有 get 和 set 函数的对象来创建一个可写的 ref 对象。
1 | const state = reactive({ |
侦听一个或多个响应式数据源,并在数据源变化时调用所给的回调函数。
1 | const count = ref(0); |
多个值
1 | const count1 = ref(0); |
当直接侦听一个响应式对象时,侦听器会自动启用深层模式:
1 | const state = reactive({ count: 0 }) |
停止侦听器:
1 | const stop = watch(source, callback) |
立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。
1 | const count = ref(0) |
和watch()用法一样,区别watchEffect可以自动收集需要监听的依赖。
常用的响应式API就这些,更多API可以去官网查看
⽣命周期钩⼦写法微调,xxx变成 OnXxx,如mouted 变成 onMounted。created和beforeCreate不再需要。Vue2中 destroyed 和 beforeDestroy 在Vue3换了名字,换成 beforeUnmount 和 unmounted 。
选项式 API | 组合式 API |
---|---|
beforeCreate | setup() |
created | setup() |
beforeMount | onBeforeMount |
mounted | onMounted |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeUnmount | onBeforeUnmount |
unmounted | onUnmounted |
errorCaptured | onErrorCaptured |
renderTracked | onRenderTracked |
renderTriggered | onRenderTriggered |
activated | onActivated |
deactivated | onDeactivated |
serverPrefetch | onServerPrefetch |
+ + + + ++ + + + + +
MongoDB是一种面向文档的数据库管理系统,由C++撰写而成,以此来解决应用程序开发社区中的大量现实问题。
和关系型数据库比较,面向文档的数据库不再有“行”(row)的概念,取而代之的是更为灵活的“文档”(document)模型。通过再文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层次关系。
另外,不再有预定义模式,文档的键(key)和值(value)不再是固定的类型和大小。由于没有固定的模式,根据需要添加或删除字段变得更容易。可以进行快速迭代,所以开发进程得到加快。
文档是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的行。
集合(collection)可以看作是一个拥有动态模式(dynamic schema)的表。
MongoDB的一个实例可以拥有多个相互独立的数据库(database),每一个数据库都拥有自己的集合。
每一个文档都有一个特殊的键“_id”,这个键在文档所属的集合中是唯一的。
命令提示符(cmd)执行,具体路径需要看安装的版本,我的是3.6版本。
1 | cd C:\Program Files\MongoDB\Server\3.6\bin |
控制台会输出一些东西,没有报错MongoDB就启动了。
这样启动比较麻烦,每次都要启动,所以可以把它注册成windows 的服务
1 | // 使用管理员权限运行 |
1 | services.msc // 查看服务 |
删除服务
1 | mongod --remove --serviceName MongoDB // MongoDB是服务名 |
MongoDB 还可以通过配置文件启动
可以去官网查看https://docs.mongodb.com/manual/reference/configuration-options/
在打开一个命令提示符(cmd)之前运行的MongoDB那个不要关闭,因为没有注册成windows的服务,关闭就找不到数据库了。
1 | cd C:\Program Files\MongoDB\Server\3.6\bin |
这样就链接上数据库了,当然还会输出一大堆东西。
我们先创建一个数据库,再刚才连接MongoDB的cmd执行
1 | use test02 |
创建一个test02的数据库并切换过去。
db变量指向当前数据库。
向集合里插入文档,之前也讲了MongoDB没有预定义模式,所以不用新建表和表结构了。
insert方法 把一条文档保存到集合里。
1 | db.user_table.insert({"name", "lanpangzhi", "age": 18}) |
查看集合里面的文档。
find和findOne方法可以用于查询集合里的文档。只想查看一个文件,可以用findOne
1 | db.user_table.find() |
find和findOne还可以接受一个查询文档作为限定条件。
1 | db.user_table.find({"name": "lanpangzhi"}) |
更新集合里面的文档
update方法接受(至少)两个参数:第一个是限定条件(用于匹配待更新的文档),第二个是新的文档。
1 | db.user_table.update({name: lanpangzhi},{"name": "lanpangzhi", "age": 18, "sex": 1}); |
删除集合里面的文档
remove方法可将数据库的集合永久删除,如果不加参数默认把集合里面所有的文档删除。它可以接受一个限定条件的文档作为参数。
1 | db.user_table.remove({"name": "aaa"}) |
+ ++ + + + + ++ + + + http://blog.langpz.com/Windows下安装MongoDB.html + ++ + +
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
打开安装程序,勾选同意协议,点击下一步(Next)
下载地址
可以用它去管理MySQL。新建库,新建表,修改数据删除数据。
库: 文件夹-用来管理,无法存放数据,一个库可以存放很多张表。
表: 文件-存放数据用的。
列: 一列(数据元素) 包含了相同的数据, 例如用户的数据。
行:一行是一组相关的数据,例如一条用户名和密码的数据。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
数据类型 | 说明 |
---|---|
INT | 整数 |
FLOAT | 浮点数 |
DATE | 日期值 |
DATETIME | 混合日期和时间值 |
TIME | 时间值或持续时间 |
VARCHAR | 变长字符串 |
CHAR | 定长字符串 |
+ ++ + + + + ++ + + + http://blog.langpz.com/Windows下安装MySQL.html + ++ + +
axios配置如下只需要增加 auth 参数即可,auth: {username: 'lanpz',password: '123456789'}
。
1 | axios.post('xxx', {x: 1}, auth: {username: 'lanpz',password: '123456789'} , { |
在axios请求拦截器里面自定义下请求头即可。
1 | service.interceptors.request.use(async request => { |
+ + + + ++ + + + + +