一,前端渲染数据 的弊端

仿 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. Django 连接 Mysql (8.0.16) 失败

    首先,确认数据库配置正确无误: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # or use: mysql.con ...

  2. 通过开源项目免费申请 IntelliJ IDEA license(激活码)

    通过github开源项目免费申请 IntelliJ IDEA license(激活码) 我用来申请的github开源项目:https://github.com/Linliquan/springboot ...

  3. C# 篇基础知识1——编译、进制转换、内存单位、变量

    编译:C#语言要经过两次编译,程序员编写好源代码后进行第一次编译,将源代码编译为微软中间语言(MSIL),生成可以发布的应用软件:当用户使用软件时,MSIL代码会在首次载入内存后进行第二次编译,中间语 ...

  4. delphi窗体按钮灰化禁用

    1.使最小化按钮变灰:setwindowlong(handle,gwl_style,getwindowlong(handle,gwl_style)   and   not   ws_minimizeb ...

  5. WOFF格式

    WOFF格式WOFF文件格式是用WOFF (Web Open Font Format)创建的网页开放字体格式,Web开放字体格式(Web Open Font Format,简称WOFF)是一种网页所采 ...

  6. Ternsorflow 学习:002-Tensorflow 基础知识

    前言: 使用 TensorFlow 之前你需要了解关于 TensorFlow 的以下基础知识: 使用图(graphs) 来表示计算 在会话(session) 中执行图 使用张量(tensors) 来代 ...

  7. VMware Tools 组件、配置选项和安全要求

  8. Java中遍历 Session 和 Request

    转: session的遍历: java.util.Enumeration e = request.getSession().getAttributeNames(); while( e.hasMoreE ...

  9. 从三星官方uboot开始移植

    移植前的准备 下载 android_uboot_smdkv210.tar.bz2 这个文件 开始移植 本人使用的开发板是九鼎的 x210,在三星 uboot 的主 Makefile 中找到了类似的 s ...

  10. es和数据类型

    js=es+dom+bom,dom和bom前面已经讲完了 es是js的本体,是指数据类型,和对于数据的操作手段,他的版本更新得很快 这些功能不是html文件提供的,也不是浏览器提供的,即使脱离了dom ...