2024-01-09

项目中使用nodejs-express提供的接口

1.框架结构(部分)


image.png

2.框架组成
2-1 api
2-1-1 base.js
/***

  • 存放所有网络请求地址
    */
    const base = {
    baseUrl:"http://localhost:3000", //公共地址
    login:"/api/login", //登录地址
    router:"/api/router", //用户权限地址
    line:"/api/line", //图表line地址
    projectInfo:"/api/project/all", //项目信息请求
    search:"/api/project/search", //模糊搜索查询
    total:"/api/project/total", //获取数据总条数
    addProject:"/api/project/add", //添加隧道
    delProject:"/api/project/del", //删除项目信息
    preUpdateProject:"/api/project/update/pre", //预更新项目信息
    updateProject:"/api/project/update/", //更新项目信息
    tunnelList:"/api/tunnel/list", //隧道设计信息-tree-一级
    tunnelListChild:"/api/tunnel/list/child", //隧道设计信息-tree-二级
    tunnelContent:"/api/tunnel/content", //隧道设计信息-内容
    uploadTunnelContent:"/api/tunnel/content/url", //隧道设计信息-上传
    pdfPreview:"/api/tunnel/pdf", //PDF预览
    userList:"/api/user/list", //用户列表
    userSearch:"/api/user/search", //用户搜索
    userAdd:"/api/user/add", //用户添加
    userDel:"/api/user/del", //用户删除
    userPreview:"/api/user/preview", //用户预更新
    userUpdate:"/api/user/update", //用户更新
    }

export default base

2-1-2 index.js
  import axios from "../utils/request.js";

import base from "./base.js";

const api = {
/**
* 登录
/
getLogin(params){
// console.log(params);
return axios.post(base.baseUrl + base.login,params)
},
/
*
* 用户权限
/
getRouter(params){
return axios.get(base.baseUrl + base.router,{
params
})
},
/
**
* 获取图表line数据
/
getLine(params){
return axios.get(base.baseUrl + base.line,{
params
})
},
/
**
* 读取项目信息
/
projectInfo(params){
return axios.get(base.baseUrl + base.projectInfo,{
params
})
},
/
*
* 模糊搜索
/
getSearch(params){
return axios.get(base.baseUrl + base.search,{
params
})
},
/
*
* 获取数据总条数
/
getTotal(){
return axios.get(base.baseUrl + base.total)
},
/
*
* 添加项目信息
/
getAddProject(params){
return axios.get(base.baseUrl + base.addProject,{
params
})
},
/
*
* 删除项目信息
/
getDelProject(params){
return axios.get(base.baseUrl + base.delProject,{
params
})
},
/
*
* 预更新项目信息
/
getRreUpdateProject(params){
return axios.get(base.baseUrl + base.preUpdateProject,{
params
})
},
/
*
* 更新项目信息
/
getUpdateProject(id,params){
return axios.put(base.baseUrl + base.updateProject + id,params)
},
/
*
* 隧道设计信息 tree 一级
/
getTunnelList(){
return axios.get(base.baseUrl + base.tunnelList)
},
/
*
* 隧道设计信息 tree 二级
/
getTunnelListChild(params){
return axios.get(base.baseUrl + base.tunnelListChild,{
params
})
},
/
*
* 隧道设计信息 内容
/
getTunnelContent(params){
return axios.get(base.baseUrl + base.tunnelContent,{
params
})
},
/
*
* 隧道设计信息 上传
/
getUploadTunnelContent(params){
return axios.get(base.baseUrl + base.uploadTunnelContent,{
params
})
},
/
*
* PDF预览
*/
getPdfPreview(params){
return axios.get(base.baseUrl + base.pdfPreview,{
params
})
},

/**
 * 用户列表
 */
getUserList(){
    return axios.get(base.baseUrl + base.userList)
},
/**
 * 用户搜索
 */
getUserSearch(params){
    return axios.get(base.baseUrl + base.userSearch,{
        params
    })
},
/**
 * 用户添加
 */
getUserAdd(params){
    return axios.get(base.baseUrl + base.userAdd,{
        params
    })
},
/**
 * 用户删除
 */
getUserDel(params){
    return axios.get(base.baseUrl + base.userDel,{
        params
    })
},
/**
 * 用户预更新
 */
getUserPreview(params){
    return axios.get(base.baseUrl + base.userPreview,{
        params
    })
},
/**
 * 用户更新
 */
getUserUpdate(params){
    return axios.get(base.baseUrl + base.userUpdate,{
        params
    })
}

}

export default api

2-2 router
2-2-1 dynamicRoute_SM.js

const manageSM = {

path: '/system',
name: 'system',
component: () => import("../views/SystemManage/index.vue"),
meta: {
requiresAuth: true,
key: "系统信息管理"
}

}

export default manageSM

2-2-2 dynamicRoute.js

const manage = {

path: '/work',
name: 'work',
component: () => import("../views/WorkManage/index.vue"),
meta: {
requiresAuth: true,
key: "工作监督管理"
}

}

export default manage

2-2-3 index.js

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView/index.vue'
import layout from '../views/layout.vue'
import LoginInfo from "../views/LoginInfo/index.vue"
import { useLoginStore } from '@/stores/loginStore'
import { useMenuStore } from '@/stores/menuStore.js'

const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: "/",
name: "layout",
component:layout,
meta:{
requiresAuth:true
},
children:[
{
path: '/',
name: 'home',
component: HomeView,
meta:{
requiresAuth:true,
key:"首页"
}
},
{
path: '/project',
name: 'project',
component: () =>import("../views/ProjectInfo/index.vue"),
meta:{
requiresAuth:true,
key:"项目基础信息"
}
},
{
path: '/tunnel',
name: 'tunnel',
component: () =>import("../views/TunnelInfo/index.vue"),
meta:{
requiresAuth:true,
key:"隧道设计信息"
}
},
{
path: '/build',
name: 'build',
component: () =>import("../views/BuildManage/index.vue"),
meta:{
requiresAuth:true,
key:"施工监控检测"
}
},
{
path: '/geological',
name: 'geological',
component: () =>import("../views/GeologicalInfo/index.vue"),
meta:{
requiresAuth:true,
key:"超前地址预报"
}
},

    {
      path: '/ucenter',
      name: 'ucenter',
      component: () =>import("../views/UserCenter/index.vue"),
      meta:{
        requiresAuth:true,
        key:"个人中心"
      }
    },
    {
      path: '/plan',
      name: 'planTest',
      component: () =>import("../views/BuildManage/PlanTest/index.vue"),
      meta:{
        requiresAuth:true,
        key:"监测计划"
      }
    },
    {
      path: '/section',
      name: 'section',
      component: () =>import("../views/BuildManage/SectionTest/index.vue"),
      meta:{
        requiresAuth:true,
        key:"切面检测"
      }
    }
  ]
},
{
  path:"/login",
  name:"login",
  component:LoginInfo
},
{
  path:"/pdf/:id",
  name:"pdf",
  component:() =>import("../views/TunnelInfo/PDFViewer/index.vue")
},
{
  //404路径匹配规则 没有找到对应的路径地址
  path:"/:pathMatch(.*)*",
  name:"notFound",
  component:() => import("../views/NotFound/index.vue")
}

]
})

/***

  • 路由权限
    */
    router.beforeEach((to,from,next) =>{
    if (to.meta.requiresAuth) {
    // 需要验证登录
    const loginStore = useLoginStore()
    if (!loginStore.token) {
    next({
    path:"/login"
    })
    }else{
    next()
    }
    }else{
    next()
    }
    })

router.afterEach((to,from) =>{
// 存储路径信息
localStorage.setItem("active",to.path);
if (to.meta.key) {
const menuStore = useMenuStore()
menuStore.breadcrumb = to.meta.key
}
})

export default router

2-3 utils

2-3-1 request.js

import axios from "axios"
import qs from "querystring"

const errorHandle = (status,info) =>{
switch(status){
case 400:
console.log("语义错误");
break;
case 401:
console.log("服务器认证失败");
break;
case 403:
console.log("服务器请求拒绝执行");
break;
case 404:
console.log("请检查网路请求地址");
break;
case 500:
console.log("服务器发生意外");
break;
case 502:
console.log("服务器无响应");
break;
default:
console.log(info);
break;
}
}
/**

  • 创建Axios对象
    */
    const instance = axios.create({
    timeout:5000
    })

instance.interceptors.request.use(
config =>{
if(config.method === 'post' || config.method === "put"){
config.data = qs.stringify(config.data)
}
return config
},
error => Promise.reject(error)
)
instance.interceptors.response.use(
response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
error =>{
const { response } = error;
if(response){
errorHandle(response.status,response.info)
}else{
console.log("网络请求被中断了");
}
}
)
export default instance

2-3-2 utils.js

export function dateFormater(value) {
let date = new Date(value)
let year = date.getFullYear()
let month = date.getMonth() + 1 < 10 ? 0${date.getMonth() + 1} : date.getMonth() + 1
let day = date.getDate() < 10 ? 0${date.getDate()} : date.getDate()
return ${year}-${month}-${day}
}

3.main.js配置

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'
import piniaPersist from 'pinia-plugin-persist'
import elementIcon from './plugins/icons'
import echarts from './plugins/echarts'
import i18n from './locales/i18n.js'
import ElementPlus from 'element-plus'
import zh from "element-plus/dist/locale/zh-cn.mjs"
import en from "element-plus/dist/locale/en.mjs"
import '@/assets/init.css'

const app = createApp(App)
const pinia = createPinia()

pinia.use(piniaPersist)

app.use(echarts)
app.use(pinia)
app.use(router)
app.use(elementIcon)
app.use(i18n)
app.use(ElementPlus,{
locale:localStorage.getItem("lang") === 'zh' ? zh : en
})

app.mount('#app')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358

推荐阅读更多精彩内容

  • 项目开发流程 脚手架 一、自己搭建(公司搭建属于自己的) webpack 二、vue-cli webpack3 三...
    赵赵赵_0c27阅读 62评论 0 0
  • 一、概念介绍 Vue.js和React.js分别是目前国内和国外最火的前端框架,框架跟类库/插件不同,框架是一套完...
    刘远舟阅读 1,064评论 0 0
  • 一、企业项目开发流程 产品提需求 交互设计出原型设计 视觉设计出UI设计图 前端开发出页面模板 server端存取...
    Eric_V阅读 1,757评论 0 3
  • Nuxt爬坑 第一节:nuxt.js相关概述 nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作S...
    阿_军阅读 1,010评论 0 0
  • Vite-Vue3.x-TS-Eslint项目初始化 Lzq811/Vue3.x-vite-ts-eslint-p...
    东方三篇阅读 1,202评论 0 0