nuxt.js 는 middleware(미들웨어)에서 경로 감정 권 조작 을 실현 합 니 다.
8065 단어 nuxtmiddleware경로
일반적으로 나 는 쿠키 에 저 장 된 token 을 판단 함으로써 판단 한다.
middleware 폴 더 아래'auth.js'파일 을 새로 만 듭 니 다.
현재 auth.js 파일 에서 쿠키 에 token 필드 가 포함 되 어 있 는 지 판단 합 니 다.
import getCookie from '~/utils/getCookie'
export default function ({route, req, res, redirect}) {
let isClient = process.client;
let isServer = process.server;
let redirectURL = '/sign';
var token, path;
//
if (isServer) {
// cookie
let cookies = getCookie.getcookiesInServer(req)
// cookie token
token = cookies.token ? cookies.token : ''
}
//
if (isClient) {
// ( )cookie token
token = getCookie.getcookiesInClient('token')
}
// token
// ,
if (!token) {
redirect(redirectURL)
}
}
쿠키 가 져 오 는 파일 새로 만 들 기~/uitls/getCookie.js
먼저:js-cookie 다운로드
npm i js-cookie -s
import Cookie from 'js-cookie'
export default {
// cookie
getcookiesInServer:function (req) {
let service_cookie = {};
req && req.headers.cookie && req.headers.cookie.split(';').forEach(function (val) {
let parts = val.split('=');
service_cookie[parts[0].trim()] = (parts[1] || '').trim();
});
return service_cookie;
},
// cookie
getcookiesInClient:function (key) {
return Cookie.get(key) ? Cookie.get(key) : ''
}
}
경로 인증 이 필요 한 page 페이지 에서 사용 합 니 다.예 를 들 어~/page/index.vue 에서 사용 합 니 다.
<script>
export default {
name: 'index',
// auth middleware auth.js
middleware: 'auth',
}
</script>
js-cookie 확장1.js-cookie 설치
npm install js-cookie --save
2.사용
인용
import Cookie from 'js-cookie'
2 클 라 이언 트 사용
// 1.
Cookie.get(key)
// 2.
Cookie.set('name', value, {expires: })
// 3.
Cookie.remove("name")
// :
let seconds = 3600; // /
let expires = new Date(new Date() * 1 + seconds * 1000);
보충 지식:js 중간 부품 의 간단 한 실현 원리1.기초 판
나 는 복잡 한 판 을 바 꾸 었 다.서로 다른 방법 명,서로 다른 호출 방법 으로 바 꿔 야 한다.그러나 next 설정 만 잘 하면 초보 자 들 이 보기 에 비교적 적합 하 다.
class Middleware {
constructor () {
this.middleware = (next)=>{//console.log("this.middleware: "+next)
/*this.middleware: () =>{
console.log("use: "+fn.call(this, next));
return fn.call(this, next)*/
return next();
}
}
run (fn) {
// console.log(this)
this.middleware(
() => fn.call(this,"nihaoafddsf")
)
}
use (fn) {
const previousFn = this.middleware
this.middleware=(next)=>{
// console.log(next)
/*() =>{
console.log("fetch: "+fn.call(this, next));
return fn.call(this, next)
}*/
previousFn.call(this, () =>{
// console.log("use: "+fn.call(this, next));
return fn.call(this, next)
})
}
}
fetch(fn){
const previousFn = this.middleware
this.middleware=(next)=>{
// console.log(next)//() => fn.call(this,"nihaoafddsf")
previousFn.call(this, () =>{
console.log("fetch: "+fn)
return fn.call(this, next)
})
}
}
}
let bnm = new Middleware;
bnm.use(
(next)=>{
console.log(3)
console.log(next)
next()
}
)
bnm.fetch((next)=>{
console.log("nihaoa")
next()
})
bnm.run(function (canshu) {
console.log(1)
console.log(canshu)
})
공구.1.우선,여기 서 함수 식 프로 그래 밍 을 사용 하여 함수 에 변 수 를 부여 합 니 다.
2.js class 와 원형의 this 원 리 를 교묘 하 게 이용 했다.(계승 함수 가 호출 될 때 this 는 계승 함수 가 있 는 원형 대상 이 아니 라 현재 계승 대상 을 가리킨다.)
원리 분석
1.왜 링크 를 만 들 수 있 나
1.도구 2,원형 this 를 이용 하여 링크 의 원 리 를 달성 합 니 다.
첫 번 째 use 호출 시,그의 previous 는 가장 원시 적 인 this.middleware 입 니 다.
동시에 클 라 스 의 this.middleware 를 자신의 것 으로 바 꿉 니 다.
두 번 째 호출 이 있 을 때,그의 preious 는 첫 번 째 this.middleware 이다.
같은 이치,n 개의 같은 설정
마지막 호출 이 끝 났 을 때,이 때 this.middleware 는 마지막 설정 을 가리 키 고 있 습 니 다.
2.어떻게 촉발 합 니까?
run 방법 을 사 용 했 습 니 다.정말 자바 스 레 드 모듈 처럼 보 입 니 다.
마지막 으로 연 결 된 this.middleware 를 시작 합 니 다.앞에서 말 했 듯 이.
그래서 당신 이 클릭 할 때 바로 fetch()방법 으로 출발 하 는 것 을 볼 수 있 습 니 다.
3.어떻게 시작
내 앞의 설법 에 따 르 면 먼저 마지막 을 촉발 시 켜 야 한다.왜 그 가 첫 번 째 를 촉발 시 켰 는 지,그래,내 가 복잡 한 판 을 사 용 했 을 때 나 도 어 리 석고 이해 가 되 지 않 았 다.그리고 처음에 나 는 그녀 를 여러 가지 다른 방법 으로 만 들 었 고 이런 방법 들 을 순서대로 사용 했다.이렇게 해서 마침내 그것 의 세 번 의 체인 을 벗 겼 다.
재 귀적 이 라 고 해 야 합 니 다.next()방법 에 해당 하 는 방법 을 작성 하면 똑 같이 실 행 됩 니 다.재 귀적 인 것 처럼.하지만 그 는 링크 의 특성 이 있 습 니 다.정말 신기 합 니 다.
이것 이 바로 그의 체인 호출 이용 이다.내 가 앞에서 말 한 두 가지 이다.
이렇게 해서 그 는 처음으로 돌 아 왔 다.
4.해당 하 는 것 을 순서대로 터치 하여 미들웨어 의 호출 을 달성 합 니 다.
그 는 호출 하기 시작 했다.
호출 완료 후 return 으로 돌아 가기
그리고 처음 오 는 길에 따라 원래 의 길 로 돌아간다.
2.진급 판,코드 를 어떻게 절약 하 는 것 이 우리 의 중급 목표 입 니까?
js 흑 마술 이 야 말로 정말 재 미 있 는 것 이다.
특히 디 버 깅 을 할 때 익숙 하지 않 으 면 그 가 한 번 만 돌아 갔다 고 생각 할 것 이다.사실은 그 는 이미 여러 번 돌아 갔다.
class Middleware {
constructor () {
this.i = 0;
this.middleware = (next) => { console.log(next);return next()}
}
run (fn) {
console.log(this)
this.middleware(
() => fn.call(this)
)
}
use (fn) {
const previousFn = this.middleware
this.middleware = (next) =>
previousFn.call(this, () =>{
console.log(fn);
return fn.call(this, next)
})
}
}
const instance = new Middleware()
instance.use(function (next) {
setTimeout(() => {
console.log('first')
this.firstMiddlewareLoaded = true
next()
}, 500)
})
instance.use(function (next) {
setTimeout(() => {
console.log('second')
this.secondMiddlewareLoaded = true
next()
}, 250)
})
instance.use(function (next) {
console.log('third')
this.ThirdMiddlewareLoaded = true
next()
})
const start = new Date()
instance.run(function () {
console.log('first middleware loaded:', this.firstMiddlewareLoaded)
console.log('second middleware loaded:', this.secondMiddlewareLoaded)
console.log('Third middleware loaded:', this.ThirdMiddlewareLoaded)
console.log('time passed:', new Date() - start)
})
쓰 는 방법 은 여전히 같다.바로 여기에 많은 의문 이 있 는 문제 이다.주로 함수 세트 2 층 을 호출 하 는 문제 이다.밖 에 두 겹 으로 되 어 있 습 니 다.콜 을 사용 할 때 함수 식 프로 그래 밍 을 사용 하면 가장 안쪽 에 있 는 next()방법 을 읽 을 수 없습니다.
그 는 프로그램 이 즉시 실행 되 었 거나 next()가 없 거나 next 가 실행 되 지 않 았 기 때문에 setimeout 을 사용 했다.그 는 바로 돌아 올 것 이다.
하지만 타 이 머 는 도착 하 자마자 바로 호출 되 었 다.이것 이 원인 이 고 의 심 스 러 운 문제 이기 도 하 다.
이상 의 nuxt.js 는 middleware(미들웨어)에서 경로 감 권 조작 을 실현 하 는 것 이 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【비공식】Notion을 CMS로 해 기사 일람을 취득해 보았다 【하지만 편리】최근에는 업무 위탁으로 디자인 회사에서 배우면서 일전을 벌 수 있는 생활을 하고 있습니다. 또 이 후 axios를 넣을지 묻는다고 생각하므로 잊지 않고 넣어 봅시다. 이번에는 create-nuxt-app라는 페이지를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.