一,前端渲染数据 的弊端

仿 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. less在vscode中的配置方式

    1.在vscode插件中下载easy less这个插件. 2.新建项目,分别建两个文件夹存放less和自动编译好的css,页面中引入文件引css就可以了. 3.根据你的文件位置,在用户设置中设置需要配 ...

  2. MyBatis-Insert、Delete、Update的注意事项

    MyBatis-Insert.Delete.Update的注意事项 插入/更新乱码的解决 出现插入乱码,首先要考虑数据库的编码集是不是UTF-8 如果数据库的编码无误,查看MyBatis的全局配置文件 ...

  3. CF755G PolandBall and Many Other Balls 题解

    从神 Karry 的题单过来的,然后自己瞎 yy 了一个方法,看题解区里没有,便来写一个题解 一个常数和复杂度都很大的题解 令 \(dp_{i,j}\) 为 在 \(i\) 个球中选 \(j\) 组的 ...

  4. SciPy 安装

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  5. STM32CubeIDE 编译C/C++程序

    文章转自  https://www.cnblogs.com/skyofbitbit/p/3708216.html STM32CubeIDE 其实就是STM32CubeMx + eclipse 首先,W ...

  6. Linux 只复制目录,不复制目录下数据文件

    [root@yoon u02]# mkdir yoon [root@yoon u02]# mkdir hank [root@yoon yoon]# mkdir -p 1/data [root@yoon ...

  7. Python最新暴力破解WiFi,攻破所有密码限制,最强破解!

    暴力破解wifi密码 这个代码也是非常简单,这里需要用Python中的pywifi这个库,所以需要在DOS命令下安装这个库,同样使用pip install pywifi,很简单就安装成功了,我用的是P ...

  8. JS 选择电脑中的文件目录

    按钮调用方法function CarryOut(){ var inputObj=document.createElement('input') inputObj.setAttribute('id',' ...

  9. Spring AOP 管理事务

    <aop:config proxy-target-class="true"> <aop:pointcut expression="execution(* ...

  10. Python 编写代码 检查是否遵循PEP 8标准

    实际上并非必须遵守PEP 8,但是它已经成为一个默认的.约定俗成的规则,可以使代码风格更统一,提高可读性. 由于最近一直在学习Ubuntu,因此此处仍然以Ubuntu为例,介绍一下规则检查工具,它能帮 ...