6月11日笔记

练习代码

import request from '../utils/request.js'

export const getNewsList = () => request.get('/news')

export const getNewsDetail = (id) => request.get(/news/${id})

export const publishNews = (data) => request.post('/news', data)

export const deleteNews = (id) => request.delete(/news/${id})

export const likeNews = (id, likes) => request.patch(/news/${id}, { likes })

import request from '../utils/request.js'

export const login = (data) => {

return request.get('/users', { params: { username: data.username } })

}

export const register = (data) => {

return request.post('/users', data)

}

import { createRouter, createWebHistory } from 'vue-router'

import Login from '../views/Login.vue'

import Register from '../views/Register.vue'

import Home from '../views/Home.vue'

import Detail from '../views/Detail.vue'

const routes = [

{ path: '/', redirect: '/login' },

{ path: '/login', component: Login },

{ path: '/register', component: Register },

{ path: '/home', component: Home },

{ path: '/detail/:id', component: Detail, name: 'detail' }

]

const router = createRouter({

history: createWebHistory(),

routes

})

router.beforeEach((to, from, next) => {

const token = localStorage.getItem('token')

if ((to.path === '/home' || to.path.startsWith('/detail')) && !token) {

next('/login')

} else {

next()

}

})

export default router

import { defineStore } from 'pinia'

export const useUserStore = defineStore('user', {

state: () => ({

token: localStorage.getItem('token') || '',

username: localStorage.getItem('username') || ''

}),

actions: {

setUser(username, token) {

this.username = username

this.token = token

localStorage.setItem('username', username)

localStorage.setItem('token', token)

},

logout() {

this.username = ''

this.token = ''

localStorage.removeItem('username')

localStorage.removeItem('token')

}

}

})

import axios from 'axios'

const request = axios.create({

baseURL: 'http://localhost:3000',

timeout: 10000

})

// 请求拦截器:自动添加 token

request.interceptors.request.use(config => {

const token = localStorage.getItem('token')

if (token) {

config.headers.Authorization = Bearer ${token}

}

return config

})

// 响应拦截器:统一处理错误

request.interceptors.response.use(

response => response.data,

error => {

if (error.response?.status === 401) {

localStorage.removeItem('token')

window.location.href = '/login'

}

return Promise.reject(error)

}

)

export default request

import { createApp } from 'vue'

import App from './App.vue'

import router from './router'

import { createPinia } from 'pinia'

import ElementPlus from 'element-plus'

import 'element-plus/dist/index.css'

const app = createApp(App)

app.use(router)

app.use(createPinia())

app.use(ElementPlus)

app.mount('#app')

{

"users": [

{

"id": "1",

"username": "张三",

"password": "123"

},

{

"id": "OGy67MjJPKw",

"username": "ye",

"password": "123"

},

{

"id": "oYty2ebrCqw",

"username": "ye",

"password": "123"

}

],

"news": [

{

"id": "1",

"title": "微头条1.0 正式发布",

"content": "微头条是一个轻量级信息平台,欢迎大家使用。",

"time": "2025-06-01 10:30:00",

"likes": 8,

"userId": 1

},

{

"id": "2",

"title": "Vue3 组合式 API 学习心得",

"content": "setup 语法糖非常简洁,ref和reactive让数据响应式变得容易。",

"time": "2025-06-02 15:20:00",

"likes": 11,

"userId": 1

},

{

"title": "123",

"content": "123",

"time": "2026/6/11 15:31:03",

"likes": 1,

"userId": 1,

"id": "can70FqF0ZU"

}

],

"$schema": "./node_modules/json-server/schema.json"

}

<!doctype html>

<title>weitoutiao-router</title> </head> </body>
posted on 2026-06-18 11:15  毋凶  阅读(3)  评论(0)    收藏  举报