广告
广告
广告
这个问题一般是出现在在路由鉴权的功能上。我们在路由守卫里面判断,当用户已经登录了,点击进入访客页,那么在进入之前我们next({name:"Home"})跳转到首页。然后就会报错:Error: Redirected from X to Y via a navigation guard.百度和谷歌找了好久,很多人都说是代码里面重定向过多,拜托,这种应该是键盘侠,如果真的过多,早就解决问题,还问个鸡腿。首先这个问题大部分都是出现在vue-router v3.1及以上的版本我觉得可能是插件的问题,因为出现这个问题的提问时间基本都是这两个月内出现的。唯一的解决办法就是降级,将...
es6的解构非常好用,可以省去很多代码。为此我测试了一些场景的错误没有对应的keyconst {data} = {datas:"文本"};这种情况下,有值,但是key无法解析,那么就会返回undefined,也就是data输出是个undefined没有值const {data} =null;这种情况就会报错,这个报错会停止js的运行,所以我们需要用try--catch捕获key对应的值为nullconst {data} ={datas:null};这种情况也不会报错,他会把null拿到综合情况const {data,test} ={datas:null};这种情况并不...
这个玩意真的太恶心了,强行换行,原本一行解决问题,现在要三行,真是日了狗了。找了半天发现只有一个方法:安装Beautify插件安装完毕后打开首选项 ---- 搜索 setting 随便找个选项,只要他有显示 在settings.json 中编辑 点击这个进入到配置文件他就是一个json对象,我们在第一个花括号里面加上如下内容:"beautify.config": { "brace_style": "collapse,preserve-inline" }实际效果应该是:{ xxxxxx这里有很多自定义的配置...
生成管理员账号一般如果自己手动去改文件,设置一个name一个password也行,但是太麻烦了,node有一个模块,可以以问题得形式询问用户,然后用户输入内容,回车后会触发一个回调,回调的参数就是用户输入的内容。首先我们需要引入一个官方的模块:readline;libs/rl.jsconst readline = require("readline"); let rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.questionAs...
对于密码的话,一般使用md5签名转成唯一的32位字符。md5不管文件有多大,都是只会生成32位,并且同一个文件,签名后结果都是相同的,而且这个结果不能反向破解,只能一个个的试,这种也称为暴力破解。暴力破击可以破解相对比较简单的密码,比如:123456 这种纯数字的。而且就算我们对同一个密码做两次md5,第一次生成的md5,第二次将第一次md5再次签名,一样也容易被人暴力破解。所以一般在第二次加密的时候,使用一段随机的字符,长度无所谓,中文都可以。libs/md5.jsmd5方法需要引入原生加密模块crypto。const crypto = require("crypto&quo...
整合一下服务:核心模块koa 框架koa-router 路由koa-static 发送静态文件(静态化文件)promise-fs 文件读写uuid 全局唯一标识符数据处理koa-better-body post数据和文件koa-convert koa-better-body的转换async方式的插件memorystream 内存流,高速数据生成promise-mysql 数据库sessionkoa-session sessionredis和bluebird redis后端渲染koa-ejs目录结构libs 用于存放自己写的通用模块log 用于存...
服务端渲染全称的 server side rendering 也就是所谓的ssr了,经常看到vue的一个关于seo优化的一个方案或者是防止首页白屏,一般选用ssr方案。优点:seo友好无兼容问题安全性高代码精简相对客户端渲染 client side rendering 客户端有两个优点:降低服务端,带宽压力用户体验好js运行速度快,生成html比服务端一个来回快很多。服务端渲染框架pug(jade)以前叫jade,现在叫pug,改名了。使用npm i pugconst pug=require('pug'); pug.renderFile( //模板 ...
使用mysql的话,虽然很稳定,但是相对读写来说,速度没有放在内存中快,于是我们可以使用redis首先是安装由于redis是针对linux的,window版本则是由微软小组进行转制作维护的,下载地址在githubredislinux版直接官网下载,或者用宝塔直接装。window版本的已经很老了,只有3.0,现在官网都6.0了,github是16年更新的。找到一个非官方的版本,目前更新到5.0了redis下载zip文件,解压打开redis server即可。使用需要安装两个插件,一个是redis,一个是用于将redis的老方法转为新异步方法的插件bluebirdnpm i redis bl...
session 的一些问题无法共享,因为所有网站不可能共用一台服务器,可能会有多个不安全,如果服务器崩溃,数据也会丢失性能低,普通的session文件都是存放本地,io非常慢(相对)于是就有两中方式进行优化:丢数据库mysql丢redis中mysqlkoa作者提供了一个接口store,这个接口也是在session的配置对象里的,他是一个对象,里面有三个生命周期函数,我称之为生命周期函数。他们会在session操作完后触发。server.use(session({ maxAge: 20 * 60 * 1000, renew: true, store: { ...
cookiecookie用于判断用户是谁,一般都是使用签名算法进行加密。加上cookie本身大小有限制,总大小才32k,头信息也才32k,所有不能太大,而且不能太多,最多20条,容量这样一算的话,单条才4k。koa创建cookie直接通过ctx对象:ctx.cookies.set(key,value);读取:ctx.cookies.get(key);签名server.keys = ["aaaa", "bbbb", "cccc"]; router.get("/", async ctx => { ct...
FormData是一种容器,用于模拟表单,向服务器发送数据,简单点来讲,他就是一个对象,键值对形式的对象。创建方式new出一个FormData对象,然后手动传入参数直接使用一个from元素转成FormData对象使用方式原生ajax配合使用let form = new FormData(); form.append("name","mulingyuer"); form.append("pass","123456"); let xhr = new XMLHTTPRequest(); xhr.open(&q...
禁用不处理文件禁用文件上传//post数据中间件 server.use(convert(body({ multipart : true })));buffer另一种文件上传形式,也是布尔值//post数据中间件 server.use(convert(body({ buffer : true })));限制上传大小有三个设置:maxFieldsSize 限制一个字段的最大大小 (默认20mb)maxFileSize 限制单个文件的最大大小 (默认200mb)maxFields 限制字段数量,比如限制最多20个文件上传 (默认100...
GET数据get的数据相对来时很简单,直接从ctx的query属性里面就可以直接获取到对应的数据router.get("/",async ctx=>{ console.log(crx.query); });POST数据post 相对来说难一点,我们需要使用一个中间件帮助我们获取数据安装:koa-better-bodynpm i koa-better-body由于这个插件使用的是generator,koa会提示这个不推荐的报错,所以我们还需要一个koa的转换插件:koa-convertnpm i koa-convert我们需要在激活body时 ,用conver...
按照官方的教程,在main文件中引入自定义的less文件,在这个前提下,我们需要less语言解析yarn add less less-loader --dev安装完我们main引入自定义的less文件,结果启动的时候出现错误:Inline JavaScript is not enabled .bezierEasingMixin();这个错误一般是因为新版本less带来的,你可以换旧版,比如5.0的版本我们在项目根目录找到vue.config.js文件,没有你就创建这个文件填入以下:module.exports = { css: { loaderOptions: {...
安装npm i koa-static一般建议创建一个目录专门保存静态文件,比如目录名:staticstatic一般放在最末尾use激活,表示如果前面的路由设置,或其他的都没有对应的,就进入的请求文件这。const Koa = require("koa"); const static = require("koa-static"); const server = new Koa(); server.listen(8080); server.use(require("./router")); server.use(stat...
参数koa-router的参数和vue中的router参数一下,一个分号带一个变量名router.get("/news/:id",async ctx=>{ });那么我们要进入这个路径,是一定要带上id的,不然就进不去:loaclhost:8080/news/1231这个id可以是任何值,数字,英文,中文参数也可以多个,这样你访问这个路径也要带上这么多的参数router.get("/news/:id/:a/:eee",async ctx=>{ });路径:localhost:8080/asda/ada/dada如何获取这些参数呢?c...
一定要是使用正统的插件:koa-router,npm官方库有很多擦边球插件,一字之差,所以需要注意了。路由方法路由方法HTTP方法含义.get()GET数组在url中,非特殊约定,一般为urlencoding.post()POST数据在body中.put()PUT数据在body中,一般用于文件上传.patch()PATCH数据在body中,一般用于数据更新.del/delete()DELETE数据在url中,一般用于删除.all() 处理所有的method请求.use() 挂在中间件注意,form表单元素只能提交get和post请求,其他类型的请求需要使用ajax这种方式。其实get和p...
属性获取属性说明可能的值method请求方法GETurl完整请求路径/xxx/xxx/api?xxx=xxxpath路径部分/xxx/xxxqueryget参数{type:‘a’,p:12}querystringget参数字符串?type=a&p=12host域名+端口localhost:8080hostname域名localhostprotocol协议httpsecure是否安全协议falseip访客ip地址xx.xx.xx.xxorigin域:协议+域名+端口http://localhost:8080其中我们可以通过ip属性写一个后台返回ip信息的apiip信息api由于我们要使用第...
res和req对象ctx有四个这个对象,分别对应原生的对象和koa自己的对象,不过相对来说,都用的很少,因为koa对ctx对象内置很多属性就是req和res对象的属性,简化了调用。ctx.req //原生的request对象 ctx.res //原生的response对象 ctx.request //koa自己的request对象 ctx.response //koa自己的response对象其中我们之前使用的ctx.body其实就等于ctx.response.body抛出异常对于错误的处理,我们之前的方式是先设置ctx的status,再设置body,相对来说很麻烦。...
用于处理不同的地址,执行不同的函数或调用不同的模块安装npm i koa-router基本使用const Koa = require("koa"); const Router = require("koa-router"); const server = new Koa(); server.listen(8080); //创建路由 const router = new Router(); router.get("/", async ctx => { ctx.body = "get请求"; ...
koa框架9 框架了解版本koa有三个大版本,1.0、2.0、3.0;其中1.0已经过气了,3.0还未发布,2.0处于一个过渡,他即可以兼容1.0也能兼容2.0,比如1.0的generator,3.0的async。所以2.0用async就行了,即便升级3.0也不会有问题。基本配置安装:npm i koaconst Koa = require("koa"); const server = new Koa(); server.listen(8080); server.use(async ctx => { ctx.body = "您好"...
最近评论