1.安装 nodejs

进入官网下载Nodejs并安装

image

2.安装 git

进入Git官网下载并安装

image

进入Github下载并解压

image

# clone the project

git clone https://github.com/PanJiaChen/vue-admin-template.git

image

# enter the project directory

cd vue-admin-template

image

# install dependency

npm install

image

# develop

npm run dev

image

image

image

** # 删除多余界面 router/index**

将router/inedx.js修改如下:

import Router from 'vue-router'

Vue.use(Router)

/* Layout */

import Layout from '@/layout'

/**

* Note: sub-menu only appear when route children.length >= 1

* Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html

*

* hidden: true if set true, item will not show in the sidebar(default is false)

* alwaysShow: true if set true, will always show the root menu

* if not set alwaysShow, when item has more than one children route,

* it will becomes nested mode, otherwise not show the root menu

* redirect: noRedirect if set noRedirect will no redirect in the breadcrumb

* name:'router-name' the name is used by (must set!!!)

* meta : {

roles: ['admin','editor'] control the page roles (you can set multiple roles)

title: 'title' the name show in sidebar and breadcrumb (recommend set)

icon: 'svg-name' the icon show in the sidebar

breadcrumb: false if set false, the item will hidden in breadcrumb(default is true)

activeMenu: '/example/list' if set path, the sidebar will highlight the path you set

}

*/

/**

* constantRoutes

* a base page that does not have permission requirements

* all roles can be accessed

*/

export const constantRoutes = [

{

path: '/login',

component: () => import('@/views/login/index'),

hidden: true

},

{

path: '/404',

component: () => import('@/views/404'),

hidden: true

},

{

path: '/',

component: Layout,

redirect: '/dashboard',

children: [{

path: 'dashboard',

name: 'Dashboard',

component: () => import('@/views/dashboard/index'),

meta: { title: 'Dashboard', icon: 'dashboard' }

}]

},

// 404 page must be placed at the end !!!

{ path: '*', redirect: '/404', hidden: true }

]

const createRouter = () => new Router({

// mode: 'history', // require service support

scrollBehavior: () => ({ y: 0 }),

routes: constantRoutes

})

const router = createRouter()

// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465

export function resetRouter() {

const newRouter = createRouter()

router.matcher = newRouter.matcher // reset router

}

export default router

修改后的界面:

image

安装ES6语法插件

npm install --save es6-promise

image

进入..\src\utils配置Axios文件

image.png

编写http.js

import Vue from 'vue';

import Axios from 'axios';

import {Promise} from 'es6-promise';

import {MessageBox, Message} from 'element-ui'

Axios.defaults.timeout = 30000; // 1分钟

Axios.defaults.baseURL = '';

Axios.interceptors.request.use(function (config) {

// Do something before request is sent

//change method for get

/*if(process.env.NODE_ENV == 'development'){

config['method'] = 'GET';

console.log(config)

}*/

if (config['MSG']) {

// Vue.prototype.$showLoading(config['MSG']);

} else {

// Vue.prototype.$showLoading();

}

// if(user.state.token){//用户登录时每次请求将token放入请求头中

// config.headers["token"] = user.state.token;

// }

if (config['Content-Type'] === 'application/x-www-form-urlencoded;') {//默认发application/json请求,如果application/x-www-form-urlencoded;需要使用transformRequest对参数进行处理

/*config['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';*/

config.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

config['transformRequest'] = function (obj) {

var str = [];

for (var p in obj)

str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));

return str.join("&")

};

}

//config.header['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';

return config;

}, function (error) {

// Do something with request error

// Vue.$vux.loading.hide()

return Promise.reject(error);

});

Axios.interceptors.response.use(

response => {

// Vue.$vux.loading.hide();

return response.data;

},

error => {

// Vue.$vux.loading.hide();

if (error.response) {

switch (error.response.status) {

case 404:

Message({

message: '' || 'Error',

type: 'error',

duration: 5 * 1000

})

break;

default:

Message({

message: '' || 'Error',

type: 'error',

duration: 5 * 1000

})

}

} else if (error instanceof Error) {

console.error(error);

} else {

Message({

message: '' || 'Error',

type: 'error',

duration: 5 * 1000

})

}

return Promise.reject(error.response);

});

export default Vue.prototype.$http = Axios;

配置axios代理:

vue.config.js ↓

image.png

'use strict'

const path = require('path')

const defaultSettings = require('./src/settings.js')

function resolve(dir) {

return path.join(__dirname, dir)

}

const name = defaultSettings.title || 'vue Admin Template' // page title

// If your port is set to 80,

// use administrator privileges to execute the command line.

// For example, Mac: sudo npm run

// You can change the port by the following methods:

// port = 9528 npm run dev OR npm run dev --port = 9528

const port = process.env.port || process.env.npm_config_port || 9528 // dev port

// All configuration item explanations can be find in https://cli.vuejs.org/config/

module.exports = {

/**

* You will need to set publicPath if you plan to deploy your site under a sub path,

* for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,

* then publicPath should be set to "/bar/".

* In most cases please use '/' !!!

* Detail: https://cli.vuejs.org/config/#publicpath

*/

publicPath: '/',

outputDir: 'dist',

assetsDir: 'static',

lintOnSave: process.env.NODE_ENV === 'development',

productionSourceMap: false,

devServer: {

port: port,

open: true,

overlay: {

warnings: false,

errors: true

},

proxy: {

// change xxx-api/login => mock/login

// detail: https://cli.vuejs.org/config/#devserver-proxy

[process.env.VUE_APP_BASE_API]: {

target: `http://127.0.0.1:${port}/mock`,

changeOrigin: true,

pathRewrite: {

['^' + process.env.VUE_APP_BASE_API]: ''

}

},

['/api']: {

target: `http://127.0.0.1:3000`,

changeOrigin: true,

pathRewrite: {

['^' + '/api']: ''

}

}

},

after: require('./mock/mock-server.js')

},

configureWebpack: {

// provide the app's title in webpack's name field, so that

// it can be accessed in index.html to inject the correct title.

name: name,

resolve: {

alias: {

'@': resolve('src')

}

}

},

chainWebpack(config) {

config.plugins.delete('preload') // TODO: need test

config.plugins.delete('prefetch') // TODO: need test

// set svg-sprite-loader

config.module

.rule('svg')

.exclude.add(resolve('src/icons'))

.end()

config.module

.rule('icons')

.test(/\.svg$/)

.include.add(resolve('src/icons'))

.end()

.use('svg-sprite-loader')

.loader('svg-sprite-loader')

.options({

symbolId: 'icon-[name]'

})

.end()

// set preserveWhitespace

config.module

.rule('vue')

.use('vue-loader')

.loader('vue-loader')

.tap(options => {

options.compilerOptions.preserveWhitespace = true

return options

})

.end()

config

// https://webpack.js.org/configuration/devtool/#development

.when(process.env.NODE_ENV === 'development',

config => config.devtool('cheap-source-map')

)

config

.when(process.env.NODE_ENV !== 'development',

config => {

config

.plugin('ScriptExtHtmlWebpackPlugin')

.after('html')

.use('script-ext-html-webpack-plugin', [{

// `runtime` must same as runtimeChunk name. default is `runtime`

inline: /runtime\..*\.js$/

}])

.end()

config

.optimization.splitChunks({

chunks: 'all',

cacheGroups: {

libs: {

name: 'chunk-libs',

test: /[\\/]node_modules[\\/]/,

priority: 10,

chunks: 'initial' // only package third parties that are initially dependent

},

elementUI: {

name: 'chunk-elementUI', // split elementUI into a single package

priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app

test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm

},

commons: {

name: 'chunk-commons',

test: resolve('src/components'), // can customize your rules

minChunks: 3, // minimum common number

priority: 5,

reuseExistingChunk: true

}

}

})

config.optimization.runtimeChunk('single')

}

)

}

}

main.js中加入http

import http from './utils/http'

Vue.use(http)

调用接口

···

欢迎

import { mapGetters } from 'vuex'

export default {

name: 'Dashboard',

computed: {

...mapGetters([

'name'

])

},

mounted(){

this.$http.get('/api/users/add').then(res => {

console.log('this.panels', res)

})

}

}

.dashboard {

&-container {

margin: 30px;

}

&-text {

font-size: 30px;

line-height: 46px;

}

}

···

全局安装koa-generator,执行下面命令

npm install -g koa-generator

image.png

构建koa2项目代码如下

koa2 projectName

image.png

初始化后台项目插件,命令如下:

cd projectName

初始化项目,如果没有安装git会报错.

npm install

项目试运行

npm run dev

成功运行

image.png

成功登录

image.png

本人数据库名为test

mongo "mongodb+srv://cluster0.rsqsm.mongodb.net/Project"?retryWrites=true&w=majority

安装mongoose

npm install mongoose --save

在第7步建好的nodejs项目中根目录创建db目录

下面代码中连接密码需要修改成自己的

config.js ↓

module.exports = {

// dbs: 'mongodb://139.159.253.110:27017/test1'

dbs: 'mongodb+srv://xxwozixin:@cluster0-7d5kk.mongodb.net/test?retryWrites=true&w=majority'

}

user.js ↓

const router = require('koa-router')()

const User = require('../db/models/user')

router.prefix('/users')

router.get('/add', function (ctx, next) {

ctx.body = 'this is a users/bar response'

})

router.get('/', function (ctx, next) {

ctx.body = 'this is a users response!'

})

router.get('/bar', function (ctx, next) {

ctx.body = 'this is a users/bar response'

})

module.exports = router

修改根目录app.js

const Koa = require('koa')

const app = new Koa()

const views = require('koa-views')

const json = require('koa-json')

const onerror = require('koa-onerror')

const bodyparser = require('koa-bodyparser')

const logger = require('koa-logger')

const index = require('./routes/index')

const users = require('./routes/users')

const mongoose = require('mongoose')

const dbconfig = require('./db/config')

mongoose.connect(dbconfig.dbs, {useNewUrlParser: true,useUnifiedTopology: true})

const db = mongoose.connection

db.on('error', console.error.bind(console, 'connection error:'));

db.once('open', function() {

console.log('mongoose 连接成功')

});

// error handler

onerror(app)

// middlewares

app.use(bodyparser({

enableTypes:['json', 'form', 'text']

}))

app.use(json())

app.use(logger())

app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {

extension: 'pug'

}))

// logger

app.use(async (ctx, next) => {

const start = new Date()

await next()

const ms = new Date() - start

console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})

// routes

app.use(index.routes(), index.allowedMethods())

app.use(users.routes(), users.allowedMethods())

// error-handling

app.on('error', (err, ctx) => {

console.error('server error', err, ctx)

});

module.exports = app

// error handler

onerror(app)

// middlewares

app.use(bodyparser({

enableTypes:['json', 'form', 'text']

}))

app.use(json())

app.use(logger())

app.use(require('koa-static')(__dirname + '/public'))

app.use(views(__dirname + '/views', {

extension: 'pug'

}))

// logger

app.use(async (ctx, next) => {

const start = new Date()

await next()

const ms = new Date() - start

console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)

})

// routes

app.use(index.routes(), index.allowedMethods())

app.use(users.routes(), users.allowedMethods())

// error-handling

app.on('error', (err, ctx) => {

console.error('server error', err, ctx)

});

module.exports = app

重启项目

关掉前面我们启动的服务在运行

image.png

spf打包解包_SPF’校园管理项目实训-1相关推荐

  1. spf打包解包_2020最新CentOS(linux下)安装7-Zip(7za压缩软件)以及解压命令,只打包不压缩,加密的方法...

    wget –no-check-certificate https://downloads.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_s ...

  2. 云计算项目实训教学解决方案

    云计算项目实训教学解决方案 [课程资源]云计算项目实训和课程设计课程体系 中职.高职还有本科,实训教学最关键的要素都是课程资源.以云计算基础课程.核心技术课程为基础,以云计算产业实际应用案例为原型,遵 ...

  3. Java做rtp解包封包_基于RTP的H视频数据打包解包类DoubleLi博客园.pdf

    基于RTP的H视频数据打包解包类DoubleLi博客园 15- 10-30 基于RTP的H264视频数据打包解包类 - DoubleLi - 博客园 DoubleLi 博客园 :: 首页 :: 博问 ...

  4. asar软件包linux,ASAR文件查看打包解包工具下载-ASAR文件查看打包解包工具v2018.07.12免费版-ucbug软件站...

    ASAR文件查看打包解包工具是一款能够帮助用户对ASAR文件进行管理的工具,通过ASAR文件查看打包解包工具能够对文件进行查看.打包.解包等功能,有需要的可以下载使用. 功能介绍 electron的a ...

  5. Mtk Android 打包解包*.img

    打包/解包 boot.img, system.img, userdata.img, or recovery.img [DESCRIPTION] MTK codebase编译出来的image必须使用MT ...

  6. Android 系统(138 )---Mtk平台 Android 打包解包*.img ,修改system.img 参数

    Mtk平台 Android 打包解包*.img ,修改system.img 参数 MTK 升级包文件如下: 若存在软件版本号存在错误或需要修改,重新编译则需要几个小时,或者要几天的测试 若可以直接修改 ...

  7. Android 系统(137)---android打包解包boot.img,system.img

    android打包解包boot.img,system.img 2017年04月28日 15:00:36 阅读数:1822 原帖地址:http://www.52pojie.cn/thread-48802 ...

  8. 自定义8583模板,打包解包,使用j8583包

    j8583_boss.xml <?xml version="1.0" encoding="UTF-8"?> <?xml version=&qu ...

  9. 自定义8583模板,打包解包,使用j8583包有改动

    j8583_boss.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE j8583-c ...

  10. 安卓8.X解包打包工具和教程,windows平台一键打包解包工具

    ROM制作工具在上周独家适配了安卓8.X的解包打包功能,很多朋友对这个功能翘首以盼,历经一个月的适配完善,得到了广泛认可. 软件是免费使用的哦! ROM制作工具目前已经是windows下最强大的一键解 ...

最新文章

  1. 持续集成之“自动化部署”
  2. 推荐几个(抖音/阿里/腾讯)年薪100W大佬的硬核公众号
  3. 结对编程-马尔科夫链作业成绩
  4. 一文详解计算机视觉的广泛应用:网络压缩、视觉问答、可视化、风格迁移等
  5. Visual C++ dll
  6. 码农口述:AI创业两年,积蓄花光,重回职场敲代码
  7. (OS X) OpenCV架构x86_64的未定义符号:错误(OpenCV Undefined symbols for architecture x86_64: error)...
  8. linux定时器错误使用,linux下定时器的使用
  9. 台式计算机有什么配置,目前台式电脑的主流配置有哪些?
  10. Python学习笔记之函数(二)
  11. 【elasticsearch】Elasticsearch : alias数据类型
  12. java实现地图导航功能吗_关于微信LBS 升级版后SOSO 地图用JAVA 实现导航功能
  13. 2018 OpenInfra Days China官方盛典邀您莅临!文末有福利!
  14. 基于栈的字节码解释执行引擎图解
  15. 房地产估值法研究报告_房地产估值方法
  16. ImagePicker
  17. 程序员自我修养笔记:第九章
  18. 《keep studying》————《持续学习》英译汉【istrangeboy精品英文励志短文系列】
  19. js台阶算法问题(上台阶模拟器)
  20. 欧洲通用数据保护条例(GDPR)合规的6个步骤

热门文章

  1. 分配系统盘容量应考虑三要素
  2. Exchange 2010安装必要条件
  3. 1.Prometheus 监控技术与实践 --- 云计算时代的监控系统
  4. 3.算法通关面试 --- 哈希表和集合
  5. 15.go install
  6. 带前后翻页的图片关东 js特效
  7. 阿里云峰会上海见,云原生场景实战即将开启
  8. 接口测试基本操作与常用接口测试工具
  9. bzoj 1014: 洛谷 P4036: [JSOI2008]火星人
  10. GM8284DD(GM8284DR)LVDS转TTL芯片功能汇总及设计注意事项