Node.JS 学习笔记(Day 5)
在做之前文件学习的时候,本来想尝试下通过json,来配置一个table的输出,发现有2个环节特别重要,一个是json的处理,一个是代码的模块化。那么今天就针对这两部分进行下单项学习。
JSON处理
Node 是基于 JS 的,所以直接采用JSON.parse()和JSON.stringify()就可以对json数据进行简单的转换处理了。示例如下:
var str = '{"id": "编号", "name": "名称"}'; console.log(JSON.parse(str)); var json = { "id" : "编号", "name" : "名称" }; console.log(JSON.stringify(json));
以上执行得到结果:
{ id: '编号', name: '名称' } {"id":"编号","name":"名称"}
那么对于程序里如何根据JSON数据进行遍历呢? 如同原生JS处理JSON一样,代码如下:
var str = '{"id": "编号", "name": "名称"}'; console.log(JSON.parse(str)); var json = { "id" : "编号", "name" : "名称" }; console.log(JSON.stringify(json)); for(var key in json){ console.log("key:", key); console.log("value:", json[key]); }
输出为:
{ id: '编号', name: '名称' } {"id":"编号","name":"名称"} key: id value: 编号 key: name value: 名称
对于包含数组的json,处理代码如下:
var jsonArray = [ {"id":"1", "name":"名称1"}, {"id":"2", "name":"名称2"}, {"id":"3", "name":"名称3"} ]; console.log("========="); var jsonLength = jsonArray.length; for(var i=0; i<jsonLength; i++){ for(var k in jsonArray[i]){ console.log("key:", k); console.log("value:", jsonArray[i][k]); } }
输出为:
========= key: id value: 1 key: name value: 名称1 key: id value: 2 key: name value: 名称2 key: id value: 3 key: name value: 名称3
模块化
要想将Node投入生产使用,就要考虑将代码进行一定的组织,模块化。所以这里对模块化相关的知识做下了解和练习。
我们将计算圆的面积和周长作为一个处理圆的模块,那么在lib目录下新建一个circle.js文件,代码如下:
var PI = Math.PI; exports.area = function(r) { return PI * r * r; } exports.circumference = function(r) { return 2 * PI * r; }
再在项目根目录下新建一个app.js做为应用文件,调用circle.js,执行里面的方法。代码如下:
var circle = require('./lib/circle.js'); console.log(circle.area(4)); console.log(circle.circumference(4));
如此便完成了对于circle的模块封装和调用了。
由此可以看出,只要被require的文件,里面所有exports的函数都可以被外部调用。
练习
既然搞明白了json处理和模块化,那么就按原来需求,通过json输出一个table的html吧。 在lib下新建一个table.js,代码如下:
exports.create = function(className, columns){ var headerColumns = columns.header; var dataColumns = columns.data; var table = createTableHeader(className, headerColumns); table += createTableContent(dataColumns); table += createTableFooter(); return table; } function createTableHeader(className, headerColumns){ var table = "<table class='"+className+"'>"; table += "<thead>"; if(headerColumns) { table += "<tr>"; for(var headerName in headerColumns){ table += "<th>"; table += headerColumns[headerName]; table += "</th>"; } table += "</tr>"; } table += "</thead>"; return table; } function createTableContent(dataColumns){ var dataSize = dataColumns.length; var table = ""; for (var i=0; i<dataSize; i++){ table += "<tr>"; for (var dataName in dataColumns[i]){ table +="<td>"; table +=dataColumns[i][dataName]; table +="</td>"; } table += "</tr>"; } return table; } function createTableFooter(){ var table = "<tfoot>"; table += "</tfoot>"; table += "</table>"; return table; }
在项目根目录下新建html.js,代码如下:
var table = require("./lib/table.js"); var fs = require("fs"); var columns = { "header" : { "id" : "编号", "name" : "名称", "path" : "路径" }, "data" : [ {"id": "1", "name": "影视", "path":"/movie"}, {"id": "2", "name": "音乐", "path":"/music"}, {"id": "3", "name": "游戏", "path":"/game"} ] } fs.writeFile("./table.html",table.create("data-table", columns), "utf8", function(){});
传递columnsjson对象,然后按照一定规则生成table的完整html代码,并生成文件。
执行后,根目录下多出一个table.html文件,内涵代码:
<table class='data-table'><thead><tr><th>编号</th><th>名称</th><th>路径</th></tr></thead><tr><td>1</td><td>影视</td><td>/movie</td></tr><tr><td>2</td><td>音乐</td><td>/music</td></tr><tr><td>3</td><td>游戏</td><td>/game</td></tr><tfoot></tfoot></table>
需求目标基本实现,主要用到了json处理、模块化和文件生成的学习知识点。













