NUXT前端服务端渲染技术框架

2024-06-04 4612阅读

服务端渲染又称SSR(Server Side Render)实在服务端完成页面的内容,而不是在客户端通过AJAX获取数据

优势:更好的SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面

Nuxt.js是一个基于Vue.js的轻量级应用框架,可用来创建服务端渲染(SSR)应用,也可以充当静态站点引擎生成静态站点应用。

https://zh.nuxtjs.org/

NUXT环境初始化

①、下载压缩包

https://github.com/nuxt-community/starter-template/archive/master.zip

②、解压

将template中的内容赋值到模块yygh-site中

NUXT前端服务端渲染技术框架 第1张

③、修改package.json (依赖文件)和nuxt.config.js

NUXT前端服务端渲染技术框架 第2张

NUXT前端服务端渲染技术框架 第3张

④、打开yygh-site模块终端(右击)

命令下载依赖:npm install

命令下载element-ui:npm install element-ui

在plugins文件夹下创建myPlugin.js文件,并引入element-ui

NUXT前端服务端渲染技术框架 第4张

nuxt.config.js中添入插件

NUXT前端服务端渲染技术框架 第5张

⑤、测试运行

命令运行:npm run dev

访问项目:http://localhost:3000

NUXT前端服务端渲染技术框架 第6张

NUXT目录结构

①、资源目录assets

用于组织未编译的静态资源,如LESS/SASS或JavaScript

NUXT前端服务端渲染技术框架 第7张

②、组件目录components

用于组织应用的Vue.js组件,Nuxt.js不会扩展增强该目录下Vue.js组件,即这些组件不会像页面那样有asyncData方法的特性

③、布局目录layouts

用于组织应用的布局组件,例如将页头和页尾提取出来,形成布局页

修改默认布局文件default.vue,将主内容区域的内容替换成

	
import '~/asserts/css/app.css' import '~/asserts/css/chunk.css' import '~/asserts/css/iconfont.css' import '~/asserts/css/main.css' //引入头文件和尾文件 import myheader from './myheader' import myfooter from './myfooter' export default{ components:{ myheader,myfooter //通过标签的方式进行对头文件和尾文件的使用 } }

创建头文件layouts/myheader.vue

	
export default{ }

创建尾文件layouts/myfooter.vue

	


	export default{
	}

④、页面目录pages

用于组织应用的路由及视图。

Nuxt.js框架读取该目录下所有的.vue文件,并自动生成对应的路由配置

引入首页静态页面pages/index.vue

	

⑤、插件目录plugins

用于组织那些需要在根vue.js应用实例化之前需要运行的Javascript插件

⑥、nuxt.config.js文件

nuxt.config.js文件用于组织Nuxt.js应用的个性化配置,以便覆盖默认配置。

封装axios

①、安装axios

执行安装命令:npm install axios

②、封装axios,用于ajax请求

模块下创建utils文件夹,utils文件夹下创建request.js

import axios from 'axios'
import {MessageBox,Message} from 'element-ui'
//创建axios实例
const service = axios.create({
	baseURL:'http://localhost',
	timeout:15000 //请求超时时间
})
//http request拦截器
service.interceptors.request.use(
	config => {
		//token先不处理,后续使用时再完善
		return config
	},
	err => {
		return Promise.reject(err)
	}
)
//http response拦截器
service.interceptors.response.use(
	response => {
		if(response.data.code != 200){
			Message({
				messae:response.data.message,
				type:'error',
				durataion:5*1000
			})
			return Promise.reject(response.data)
		}else{
			return response.data
		}
		
	}
)

NUXT路由跳转

一、固定路由

methods:{ show(hoscode){ window.location.href = '/hosp' //默认跳转到pages目录下的hosp下的index.vue } }

NUXT前端服务端渲染技术框架 第8张

NUXT前端服务端渲染技术框架 第9张

二、动态路由(每次跳转的路径不一样)

动态路由创建页面规则:在文件夹下从创建vue文件,vue文件命名规范:_参数名称.vue

NUXT前端服务端渲染技术框架 第10张

methods:{ show(hoscode){ window.location.href = '/hosp'+hoscode //每次的编号都不同 } }

=============================================

前端页面对后端接口的调用

一、创建一个api/hosp.js和dict.js

hosp.js

import request from '@/utils/request'
const api_name='/api/hosp/hospital' //对应后端Controller类上的路径
export default{
	//查询医院列表
	getPageList(page,limit,searchObj){
		return request({
			url:'${api_name}/findHospList/${page}/${limit}' ,//对应的Controller内部方法路径
			method:get,
			params:searchObj
		})
	},
	//根据医院名称模糊查询
	getByHosname(hosname){
		return request({
			url:'${api_name}/findByHosName/${hosname}' ,//对应的Controller内部方法路径
			method:'get'
		})
	}
}

dict.js

import request from '@/utils/request'
const api_name='/admin/cmn/dict' //对应后端Controller类上的路径
export default{
	//根据dictCode获取下级节点
	findByDictCode(dictCode){
		return request({
			url:'${api_name}/findByDictCode/${dictCode}' ,//对应的Controller内部方法路径
			method:'get'
		})
	},
	//根据id获取区县
	findByParentId(parentId){
		return request({
			url:'${api_name}/findChildData/${parentId}' ,//对应的Controller内部方法路径
			method:'get'
		})
	}
}

二、pages/index.vue进行对api的调用,并显示

	import hospApi from '@/api/hosp'
	import dictApi from '@/api/dict'
	
	export default{
		//服务端渲染异步,显示医院列表
		asyncData({params,error}){
			return hospApi.getPageList(1,10,null)
				.then(response => {
					return {
						list:response.data.content,
						pages:response.data.totalPages
					}
				})
		},
		data(){
			return {
				searchObj:{},
				page:1,
				limit:10,
				
				hostname:'',//医院名称
				hostypeList:[],//医院等级集合
				districtList:[],//地区集合
				hostypeActiveIndex:0,
				provinceActiveIndex:0
			}
		},
		created(){
			this.init()
		},
		methods:{
			//查询医院等级列表和所有地区列表
			init(){
				dictApi.findByDictCode('Hostype')
					.then(response => {
						//清空hostypeList
						this.hostypeList = []
						this.hostypeList.push({"name":"全部","value":""})
						//将接口返回的数据,添加到hostypeList
						for(var i = 0;i  {
						this.districtList = []
						this.districtList.push({"name":"全部","value":""})
						for(let i in response.data){
							this.districtList.push(response.data[i])
						}
					})
			},
			//查询医院列表
			getList(){
				hospApi.getPageList(this.page,this.limit,this.searchObj)
					.then(response => {
						for(lei i in response.data.coutent){
							this.list.push(response.data.content[i])
						}
						this.page = response.data.totalPages
					})
			}
			//页面展示中的点击方法
			//根据医院等级查询
			hostypeSelect(hostype,index){
				//准备数据
				this.list = []
				this.page = 1
				this.hostypeActiveIndex = index
				this.searchObj.hostype = hostype
				//调用上面查询医院列表方法
				this.getList()
			}
		}
	}

三、index.vue进行对数据的展示


	{{item.name}}
 


	{{item.name}}



NUXT前端服务端渲染技术框架 第11张


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]