Nuxt实战

1、SSR

首先说下 SSR,最近很热的词,意为 Server Side Rendering(服务端渲染),目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容,也就是用户搜不到此网站的相关信息。
我们看看SSR服务端渲染的浏览器返回的是什么

image.png

我们再来看看SPA返回的是什么
image.png

对比两者可以看到基于SSR渲染 你是可以看到网页所有的内容以及文字,而因vue是单页面应用,只能看到app的根节点,这对于seo抓取是致命的

2、Nuxt

回归正题

Nuxt.js is a minimalistic framework for server-rendered Vue applications (inspired by Next.js)

作用就是在 node.js 上进一步封装,然后省去我们搭建服务端环境的步骤,只需要遵循这个库的一些规则就能轻松实现 SSR

2.1安装流程

Nuxt.js 团队提供了 vue-cli 的初始化模板。前提安装 vue-cli,安装过的忽略此步

npm install -g vue-cli

完成后在需要创建的目录下执行以下

vue init nuxt/starter <project-name>
cd <project-name>
npm install

依赖安装完成后

npm run dev

打开浏览器 http://localhost:3000
更换端口
在文件package.json添加

"config": {
    "nuxt": {
      "host": "0.0.0.0",
      "port": "你的端口"
    }
  },

2.2目录结构

image.png

Nuxt.js 给出了最简单的目录结构

|-- pages
    |-- index.vue
|-- package.json

也就是说,至少需要一个 page 来作为展示页。
文件的路径建议都采用绝对路径,表格如下


456.jpg

例:怎么在 /pages/user/me.vue 引入一个 static 文件夹里的图片

<img src="~static/img/logo.png" alt="Logo"/>

2.3数据请求配置代理

因Nuxt目录结构 与vue项目依赖以及模块几乎不一样 这样无法直接在config-index.js文件中配置的

安装依赖
利用axios 以及proxy 模块

npm i @nuxtjs/axios @nuxtjs/proxy -D

找到nuxt.config.js文件
module.exports添加两个属性

modules : [
    '@nuxtjs/axios',
    '@nuxtjs/proxy'
  ],
  proxy : [
    [
      '/api',
      {
        target : 'http://localhost:3033',  //你的接口地址
        pathRewrite : {'^/api' : '/'}
      }
    ]
  ]

如 你需要访问http://localhost:3033/getlist 接口
那么在axios.get('/api/getlist')即可;

2.4配置路由

Nuxt.js 依据 pages 目录结构自动生成 vue-router 模块的路由配置。

基础路由
假设 pages 的目录结构如下:

pages/
--| user/
-----| index.vue
-----| one.vue
--| index.vue

那么,Nuxt.js 自动生成的路由配置如下:

router: {
  routes: [
    {
      name: 'index',
      path: '/',
      component: 'pages/index.vue'
    },
    {
      name: 'user',
      path: '/user',
      component: 'pages/user/index.vue'
    },
    {
      name: 'user-one',
      path: '/user/one',
      component: 'pages/user/one.vue'
    }
  ]
}

动态路由
在 Nuxt.js 里面定义带参数的动态路由,需要创建对应的以下划线作为前缀的 Vue 文件 或 目录。

以下目录结构:

pages/
--| _slug/
-----| comments.vue
-----| index.vue
--| users/
-----| _id.vue
--| index.vue

Nuxt.js 生成对应的路由配置表为:

router: {
  routes: [
    {
      name: 'index',
      path: '/',
      component: 'pages/index.vue'
    },
    {
      name: 'users-id',
      path: '/users/:id?',
      component: 'pages/users/_id.vue'
    },
    {
      name: 'slug',
      path: '/:slug',
      component: 'pages/_slug/index.vue'
    },
    {
      name: 'slug-comments',
      path: '/:slug/comments',
      component: 'pages/_slug/comments.vue'
    }
  ]
}

你会发现名称为 users-id 的路由路径带有 :id? 参数,表示该路由是可选的。如果你想将它设置为必选的路由,需要在 users/_id 目录内创建一个 index.vue 文件。

2.5Nuxt使用element-ui

安装element-ui 或者其他的

npm i element-ui -S

在文件夹下plugins新建文件element-ui.js

//plugins/element-ui.js
import Vue from 'vue'
import ElementUI from 'element-ui'
Vue.use(ElementUI)

在文件nuxt.config.js添加代码

  vender:[
    'element-ui'
  ],
  babel : {
      "plugins": [["component", [
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-default"
      },
      'transform-async-to-generator',
      'transform-runtime'
    ]]],
    comments: true
  },
  plugins: [
    { src: '~plugins/element-ui', ssr: true }
  ],
  css : ['element-ui/lib/theme-chalk/index.css'] //css的路径我吃了大亏注意element-ui的版本  

2.6Nuxt使用axios全局拦截

在文件夹下plugins新建文件axios.js

import axios from 'axios';
axios.interceptors.request.use(res=>{
    //... 
    return res
})

在文件nuxt.config.js添加代码

 plugins: [
    { src: '~plugins/axios', ssr: true }
  ],

3Nuxt之layout页面

我们知道在pages中创建的文件就是相对应的路由,但是所有的路由都会在
layouts/default.vue中展示,这样就会有点小问题,所有的页面的布局都会一致
比如我们美团网


image.png

里面的详情都机会是一直的布局
header一致 main 、footer一直这样可以都通过default来布局

但是当登录页和注册页,就不能用统一的布局,因为header不一致,footer不一致
我们可以在layouts文件夹中创建文件名字 自定义
然后我们在pages中的路由vue文件中指定使用该layouts
例如 我们创建的layouts中名字为login.vue

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

推荐阅读更多精彩内容

  • 实用框架以及工具 UI组件[#UI%E7%BB%84%E4%BB%B6] 开发框架[#%E5%BC%80%E5%8...
    youins阅读 12,773评论 4 133
  • 壹|并联工作与生活 我们总是为自己的工作和学习设限。 而嘉茜用了并联的方法,来平衡工作与生活。 我们也可以学习着并...
    过云雨Milo阅读 246评论 2 0
  • 有且只有满意了现在,才不会活在弥补过去和完善过去中,才会放眼天际,去追求更高层次的未来。若因某一次的失败、连续几次...
    后年十年级阅读 194评论 0 1
  • 2018.2.6复盘Days63章孝萍 一切都讲缘分,是的,有些观念会在经历过一件事情中突然会改变,有些呢因为...
    章孝萍阅读 164评论 0 0
  • 晚上本来打算看材料,但愣是没有看下去;晚上其实精神还是可以的但就是打不起精神看书,说白一点就是看着材料就烦。白...
    JJL阅读 159评论 3 1