一,前端渲染数据 的弊端

仿 apache 服务器与客户端的几次交互:

1,加载静态页面

2,加载静态资源

3,发送 ajax 请求 ,接收请求并处理返回 。

4,前端浏览器接收数据循环遍历。

存在的问题:   交互太多

/*

*  使用 ajax 作请求的方式叫做 =>  前端渲染数据,也叫客户端页面渲染

*/

解决的方法:   在服务器端遍历数据

—————————————————

二,服务端页面渲染

1,进入npm官网,搜索 art-templet 第三方模块 https://www.npmjs.com/package/art-template

2,打开文档  https://aui.github.io/art-template/zh-cn/docs/

3,根据文档安装

npm install art-template --save

4,API

template(filename, content)

根据模板名渲染模板。

  • 参数

    • {string} filename
    • {Object,string} content
  • 返回值
    • 如果 content 为 Object,则渲染模板并返回 string
    • 如果 content 为 string,则编译模板并返回 function
var html = template('/welcome.art', {
value: 'aui'
}); ———————————————————————————————————— 三,实践
1,出现了错误

2,错误原因 :   没有设置根路径,此刻路径默认根目录C盘

查看 art-template 模块文档的选项, https://aui.github.io/art-template/zh-cn/docs/options.html

var template = require('art-template');
template.defaults.root = './';
var str = template('./art.html',{
  v:'卡卡'
});
——————————————————————————————————————————————————————————————————————

四,具体代码

1,server.js 后台文件  
const http = require('http');
const fs = require('fs');
const moment = require('moment');
const server = http.createServer();
const template = require('art-template')
/**
* 修改根目录路径
*/
template.defaults.root = './';
server.on('request', function (req, res) {
  var urls = req.url;
  console.log(urls);
  if(urls=='/'){
    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
    fs.readdir('./','utf8',(err,data)=>{
      var data_arr = [];
      var count = 0;
      for(var i=0;i<data.length;i++){
 
        data_arr[i] = {};
        ((i)=>{
          fs.stat(data[i],(err,files)=>{
 
            if(files.isFile()==true){
              data_arr[i].type = 'f';
            }else{
              data_arr[i].type = 'd';
            }
          count++;
 
          data_arr[i].name = data[i];
          data_arr[i].size = files.size;
          data_arr[i].mtime = moment(files.mtime).format('YYYY/MM/DD hh:mm:ss');
          if(count == data.length){
            /**
            * 使用模板引擎读取数据
            */
            var htmls = template('./index.html',{
            data:data_arr
          });
          res.end(htmls)
        }
      })
    })(i)
 
   }
 
  })
 
 
  }else{
 
  fs.readFile('.'+urls, function (err, data) {
    res.end(data)
  });
 }
 
});
server.listen(1234, () => {
console.log('this server is runing on 1234')
});

2, index.html   前台展示文件  。 此处用到了 art-template 模块的语法 ,详细介绍 : https://aui.github.io/art-template/zh-cn/docs/syntax.html

<h1>获取文件及文件夹在前台遍历</h1>
<div id="div">
  {{each data}}
    <!-- 注意不要写成data.type -->
    {{if $value.type == 'f'}}
      <i class = 'glyphicon glyphicon-duplicate'></i> 文件名 :
    {{else}}
      <i class = 'glyphicon glyphicon-folder-close'></i> 目录名 :
    {{/if}}

  

    {{$value.name}} ,文件大小 : {{$value.size}} ,文件创建时间 : {{$value.mtime}} <br>
  {{/each}}
</div>

17 —— 服务端渲染 —— art-template的更多相关文章

  1. 基于vue-cli项目添加服务端渲染

    两个示例的git地址: 1. 我的环境 2. 方式一:使用prerender-spa-plugin插件获得SSR的效果. 2.1 说明 2.2 初始化 1 vue init webpack vue-p ...

  2. Vue服务端渲染 VS Vue浏览器端渲染)

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  3. 改造@vue/cli项目为服务端渲染-ServerSideRender

    VUE SEO方案二 - SSR服务端渲染 在上一章中,我们分享了预渲染的方案来解决SEO问题,个人还是很中意此方案的,既简单又能解决大部分问题.但是也有着一定的缺陷,所以我们继续来看下一个方案--服 ...

  4. 实例PK(Vue服务端渲染 VS Vue浏览器端渲染)

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  5. Vue服务端渲染和Vue浏览器端渲染的性能对比

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  6. Vue.js 服务端渲染业务入门实践

    作者:威威(沪江前端开发工程师) 本文原创,转载请注明作者及出处. 背景 最近, 产品同学一如往常笑嘻嘻的递来需求文档, 纵使内心万般拒绝, 身体倒是很诚实. 接过需求,好在需求不复杂, 简单构思 后 ...

  7. Egg + Vue 服务端渲染工程化实现

    在实现 egg + vue 服务端渲染工程化实现之前,我们先来看看前面两篇关于Webpack构建和Egg的文章: 在 Webpack工程化解决方案easywebpack 文章中我们提到了基于 Vue ...

  8. Angular开发实践(六):服务端渲染

    Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术. 标 ...

  9. 使用 PHP 来做 Vue.js 的 SSR 服务端渲染

    对于客户端应用来说,服务端渲染是一个热门话题.然而不幸的是,这并不是一件容易的事,尤其是对于不用 Node.js 环境开发的人来说. 我发布了两个库让 PHP 从服务端渲染成为可能.spatie/se ...

随机推荐

  1. SystemVerilog基本语法总结(下)

    2018年IC设计企业笔试题解析-(验证方向) 1.请简述:定宽数组,动态数组,关联数组,队列四种数据类型的各自特点.解析:(1)定宽数组:其宽度在声明的时候就指定了,故其宽度在编译时就确定了.(2) ...

  2. Http服务和JSP

    需要先安装tomocat8.0,并且使用的IDEA 一个web项目 新建项目 写代码 // 新建一个class @WebServlet("/test") public class ...

  3. nosql概叙

    关系型数据库管理系统:按照预先设置的组织架构,将数据存储在物理介质上 数据之间可以做关联操作

  4. sklearn调用分类算法的评价指标

    sklearn分类算法的评价指标调用#二分类问题的算法评价指标import numpy as npimport matplotlib.pyplot as pltimport pandas as pdf ...

  5. [STL]string类型的getline函数

    3.cin.getline() 实际是cin.getline(接收字符串到m,接收个数n,结束字符).接收一个字符串,可以接收空格等,最后一个字符为‘\0’.结束符可以通过设置第三个参数自己设置,默认 ...

  6. uni-app小程序组建

    (1)新建组建:编辑器右击 新建组建 (2)传值 <template> <view class="myRankingList"> <block v-f ...

  7. Golang gin开源实例——表设计

    UML Model 基本模型定义 type Model struct { ID int `gorm:"primary_key" json:"id"` Creat ...

  8. 06.Delphi接口的不对等的多重继承

    uSayHello代码如下 unit uSayHello; interface uses SysUtils, Windows, Messages, Classes, Graphics, Control ...

  9. DataTable.Copy()

    DataTable dtpocopy = dtPO.Copy(); DataRow[] dr = dtpocopy .Select("客户名称='" + cusName + &qu ...

  10. java注解——内置注解和四种元注解

    java内置注解: @Override(重写方法):被用于标注方法,用于说明所标注的方法是重写父类的方法 @Deprecated(过时方法):用于说明所标注元素,因存在安全问题或有更好选择而不鼓励使用 ...