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

服务端渲染又称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中
在这里插入图片描述

③、修改package.json (依赖文件)和nuxt.config.js
在这里插入图片描述

在这里插入图片描述

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

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

在plugins文件夹下创建myPlugin.js文件,并引入element-ui
在这里插入图片描述
nuxt.config.js中添入插件
在这里插入图片描述

⑤、测试运行

命令运行:npm run dev

访问项目:http://localhost:3000
在这里插入图片描述

NUXT目录结构

①、资源目录assets
用于组织未编译的静态资源,如LESS/SASS或JavaScript
在这里插入图片描述

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

③、布局目录layouts
用于组织应用的布局组件,例如将页头和页尾提取出来,形成布局页
修改默认布局文件default.vue,将主内容区域的内容替换成

<template>
	<div class="app-container">
		<div id="main">
			<!--公共头-->
			<myheader/>
			
			<div class="main-container">
				<el-scrollbar class='page-component__scroll'>
					<!--内容区域-->
					<nuxt/>
				</el-scrollbar>
			</div>
			
			<!--公共底-->
			<myfooter/>
		</div>
	</div>
</template>
<script>
	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 //通过标签的方式进行对头文件和尾文件的使用
		}
	}
</script>

创建头文件layouts/myheader.vue

<template>
	<div class="header-container">
		<div class="wrapper">
			<!--logo-->
			<div class="left-wrapper v-link selected">
				<img style="width:50px" width="50" height="50" src=""/>
				<span class="text">尚医通 预约挂号统一平台</span>
			</div>
			<!--搜索框-->
			<div class="search-wrapper">
				<div class="hospital-search animation-show">
					<el-autocomplete class="search-inout small"
						prefix-icon="el-icon-search"
						v-model="state"
						:fetch-suggestions="qerySearchAsync"
						placeholder="点击输入医院名称"
						@select="handleSelect">
						<span slot="suffix" class="search-btn v-link high">
					</el-autocomplete>
				</div>
			</div>
		</div>
	</div>
</template>
<script>
	export default{
	}
</script>

创建尾文件layouts/myfooter.vue

<template>
	<div class="footer-container">
		<div class="wrapper">
			<div>
				<span class="record">京 ICP 备13018369</span>
				<span class="phone">电话挂号010-56253825</span>
			</div>
			<div class=right>
				<span class="v-link clickable">联系我们</span>
				<span class="v-link clickable">合作伙伴</span>
				<span class="v-link clickable">用户协议</span>
				<span class="v-link clickable">隐私协议</span>
			</div>
		</div>
	</div>
</template>
<script>
	export default{
	}
</script>

④、页面目录pages
用于组织应用的路由及视图。
Nuxt.js框架读取该目录下所有的.vue文件,并自动生成对应的路由配置

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

<template>
	<div class="homepage-component">
		<el-carousel indicator-position="outside">
			<el-carousel-item v-for="item in 2" :key="item">
				<img src="~asserts/images/web-banner.png" alt="">
			</el-carousel-item>
		</el-carousel>
	</div>
</template>

⑤、插件目录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路由跳转

一、固定路由

<!--展示页面中绑定一个事件-->
<div @click="show(item.hoscode)">

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

在这里插入图片描述

在这里插入图片描述

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

动态路由创建页面规则:在文件夹下从创建vue文件,vue文件命名规范:_参数名称.vue
在这里插入图片描述

<!--展示页面中绑定一个事件-->
<div @click="show(item.hoscode)">

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

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

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

一、创建一个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的调用,并显示

<script>
	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 < response.data.length;i++){
							this.hostypeList.push(response.data[i])
						}
					})
				dictApi.findByDictCode('BeiJing')
					.then(response => {
						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()
			}
		}
	}
</script>

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

<!--遍历显示医院等级名称-->
<span v-for="(item,index) in hostypeList" :key="index" class="item v-link clickable"
	@click="hostypeSelect(item.value,index)">
	{{item.name}}
</span> 

<!--遍历显示地区-->
<span v-for="(item,index) in districtList" :key="index" class="item v-link clickable">
	{{item.name}}
</span>


<!--由于图片经过base64存入数据,所以显示的时候需要通过处理-->
<image :src="'data:image/jpeg;base64,'+item.logoData" :alt="item.hosname" class="hospital-img">

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为什么要学习服务端渲染 nuxt.js ? 现在我们的项目大多数都是SPA(单页面应用),在实际开发过程中单页面应用比之前的模板渲染要好很多,首先单页面应用是前后端分离,架构清晰,前端负责交互逻辑,后端负责数据,前后端单独开发,独立测试。但是,SPA不利于SEO(搜索引擎优化)。让搜索引擎更为信任该网站,通过提升排名获得更多网站流量,对于某些类型的网站是非常有必要的。目前大部分的Vue项目本质是 SPA 应用,React、Angular也都是SPA应用。SPA应用广泛用于对SEO要求不高的场景中。在我们开发的过程中,我们有 SEO 的需求,我们需要搜索引擎更多地抓取到我们的项目内容,此时我们需要SSR。SSR保证用户尽快看到基本的内容,也使得用户体验性更好。 Nuxt.js 是一个 Node 程序,基于vue.js开发的一套服务端渲染框架,必须使用 Node 环境。我们对 Nuxt.js 应用的访问,实际上是在访问这个 Node.js 程序的路由,程序输出首屏渲染内容 + 用以重新渲染的 SPA 的脚本代码,而路由是由 Nuxt.js 约定好的 pages 文件夹生成的,开发只需要遵循一定的约定,直接使用vue.js开发我们项目也是非常轻松的。 课程案例 (1) HOME PAGE (2) Jokes Page  (3)About Page  课程概述 在本课程中,大喵将使用 nuxt.js + bootstrapVue + json-server 开发实战性质一个入门级项目,带着大家来体验服务端渲染(SSR )项目构建的过程;介绍 nuxt.js项目目录的结构,每个文件夹和文件的基本概念和作用,以及nuxt.config.js 配置文件的基本介绍;页面公共结构处理,路由页面跳转配置处理;axios 接口请求;带着大家来熟悉及掌握 bootstrapVue UI组件库的使用;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值