您的位置:新葡亰496net > 新葡亰官网 > 新葡亰496net:叁个轻易的页面输出完成代码,r

新葡亰496net:叁个轻易的页面输出完成代码,r

发布时间:2019-07-28 19:28编辑:新葡亰官网浏览(172)

    JS一般般的网页重构能够动用Node.js做些什么

    2016/06/07 · JavaScript · 3 评论 · 重构

    初稿出处: 张鑫旭(@张鑫旭)   

    D:nodeupdate_name目录有如下文件:

    艺术求证:

    设置进程就隐瞒了。假设成功是能运用node的授命。node.js调节和测量检验是那个便于的。种种后台语言都有叁个向非常黑黢黢的调节台团输出语用的下令。node.js沿用FF那套东西,也正是console对象与其格局。大家先是建贰个example.js文件,内容如下,然后在调控台张开它。

    办法求证:

    一、非计算机背景前端如何快捷精通Node.js?

    做前端的应该都听过Node.js,偏开荒背景的童鞋应该都玩过。

    对于部分并未有计算机背景的,事行业内部容以静态页面呈现为主的前端,恐怕没有把玩过Node.js,且很有一点都不小希望对Node.js都未有一个相比较立体的认知——知道这厮能够跑服务,构建非常多前端工具,看上去相当棒的范例,但是,也许就只限于此了。

    “这是还是不是三言两语总结Node.js的满目呢?”
    “不可!”
    “那如何是好?”
    “那就六言四语!”

    先是,要领悟,Node.js三个JavaScript运维条件(runtime),没有错,就是用来运维Javascript. 从前JavaScript只好在浏览器这一个小世界里称王称霸。相当多前端小友人可能就JS那门程序语言熟一点,别的C , .net之类的就呵呵了。假若是病故,即使浏览器一觉醒来杜绝了,很几人就能够下岗。就像是食品单一的物种一旦这种食物没了,就坐等灭绝是多少个道理。

    但是,以往,不要操心了,Node.js让JavaScript变成杂食的了,也正是除了网页行为,能够和其他C 等语言一样,创设服务,操作文件等等。

    咱俩应当都采用过.exe后缀的文本,双击一下,就能够掩盖个病毒什么的;大家只怕还利用过.bat后缀的批管理文件,一点击,文件夹里面包车型地铁图纸全体重命名;那么一旦是.js后缀的公文呢(要是你的系统已经安装了Node.js碰着),双击一下则……当当当当……会展开编辑器看到JS代码,双击是不曾用的!

    新葡亰496net 1

    大家得以展开命令行工具,cd到钦点目录,然后输入(若是JS文件名称为test.js):

    node test

    1
    node test

    然后test.js个中的代码就足以开心地跑起来啦!

    对于“页面仔”来讲,领悟那样多就够了!

    1. 安装后Node.js环境;
    2. 用大家蹩脚的JS写多少个倒霉处理的.js文件;
    3. node执行下。

    简简单单三部曲,我们就变身成了具有开荒味道的前端从业职员了。新葡亰496net 2

    1:文件夹:icons

    修改文件名称,可改造文件的贮存路线。

    复制代码 代码如下:

    该办法以异步的点子将 data 插入到文件里,若是文件空头支票会自动创制。data能够是狂妄字符串也许缓存。

    二、蹩脚JS下的Node.js初体验

    绝大数工厂都是小厂,非常的大多数小厂都唯有三个前端,比比较多前端的JS其实都相似般。

    天地里面平常把“前端化解方案”挂在嘴边的,实际上都以有前端团队的,因为有团体, 技能显价值。

    “前端消除方案”是好,然而,纵然确实关切行当前行,应该驾驭,能够在三个大团队里面玩耍的其实是小片段人,有相当多广大的友人都以孤军作战,那套东西大概反而阻挠了长足和灵活;有十分的多过多的小友人在二三四线城市,是野生的前端开采,底子相当不够,那套庞杂的东西很难了然;有多数众多的项目正是多少个静态活动页面,没供给回回使用高射炮打蚊子。

    此时,往往供给的是定制化很强的小而美的拍卖。有同学只怕会可疑,哎哎,笔者JS水平相比较菜,自造工具这种专业会不会有一点基本啊。实际上,即便你JS一般般,借助Node.js构建一些小工具提高本身的前端开荒作用这种职业,完全不问可知。

    前面贰个这东西,有个博尔特都认可的性状,正是上心灵!

    率先,大家须求一份Node.js API文书档案,大家利用“动物找出”,搜一下:
    新葡亰496net 3

    就率先个吗,步向拜望到一长排的API列表内容: 新葡亰496net 4

    不用怕,大家只要求那一个就足以,没有错,就八个文件系统(fs)!新葡亰496net 5 别的都不需求管,那几个都以名扬四海游戏用户玩的:
    新葡亰496net 6

    点击去,又是相当多洒洒,一堆API:新葡亰496net 7
    新葡亰496net 8

    并不是怕,大家只必要……淡定,不是一个,是多少个正规的增加和删除读写重命名文件就足以了。新葡亰496net 9

    好了,然后只要求一些不好的JS,大家就足以玩起来了。

    玩什么呢?容笔者看集动漫想一想……

    设计员给的Logo重命名
    勤劳的设计员送来了香饽饽的小图片素材,不过,连接字符是下划线_,恰巧,此时,前端童鞋的处女病发错,别的本身管理的图片全部都是短横线-老是的,这里Logo全部都是下划线受不住,想要全体沟通为短横线,怎么做?

    新葡亰496net 10

    假使就一多个Logo幸而,大不断手动修改,不过,假诺如上截图,设计员一口气给了伍十个Logo,作者去,要改到头皮发麻了呢~倒不是时刻难点,而是重复劳动带来的这种枯燥和不高兴会潜移暗化职业的激情,何况这种劳动用完就没了,不能够复用,且不能够作为业绩(小编得以5分钟到位九17个公文的重命名,有个卵用~)。

    那时候,Node.js就足以闪亮上台了,有了Node.js遇到,大家若是寥寥几行JS代码,就足以完全秒杀了,很轻巧,读取文件夹里面包车型大巴装有图片,然后把称呼里面装有的下划线_替换来短横线-, 固然我们的.js文本和内需管理的小Logo文件夹结构如下:
    新葡亰496net 11

    underscore2dash.js内容如下:

    // 引进fs文件管理模块 var fs = require("fs"); // 今后我们要珍视的是'icons'文件夹 // 我们不要紧用变量表示那几个文件夹名称,方便日后敬重和保管 var src = 'icons'; // API文书档案中中找到遍历文件夹的API // 找到了,是fs.readdir(path, callback) // 文书档案中有描述: // 读取 path 路线所在目录的开始和结果。 回调函数 (callback) 接受几个参数 (err, files) 在那之中 files 是二个囤积目录中所包涵的文件名称的数组 // 因而: fs.readdir(src, function(err, files) { // files是称呼数组,因而 // 能够运用forEach遍历哈, 此处为ES5 JS一点知识 // 如果不明了,也足以行使for循环哈 files.forEach(function(filename) { // 上面正是文件名称重命名 // API文书档案中找到重命名的API,如下 // fs.rename(oldPath, newPath, callback) // 上边,我们就能够依葫芦画瓢,分明新旧文件名称: var oldPath = src '/' filename, newPath = src '/' filename.replace(/_/g, '-'); // 重命名走起 fs.rename(oldPath, newPath, function(err) { if (!err) { console.log(filename '下划线替换到功!'); } }) }); });

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // 引入fs文件处理模块
    var fs = require("fs");
    // 现在我们要关心的是'icons'文件夹
    // 我们不妨用变量表示这个文件夹名称,方便日后维护和管理
    var src = 'icons';
     
    // API文档中中找到遍历文件夹的API
    // 找到了,是fs.readdir(path, callback)
    // 文档中有叙述:
    // 读取 path 路径所在目录的内容。 回调函数 (callback) 接受两个参数 (err, files) 其中 files 是一个存储目录中所包含的文件名称的数组
    // 因此:
    fs.readdir(src, function(err, files) {
        // files是名称数组,因此
        // 可以使用forEach遍历哈, 此处为ES5 JS一点知识
        // 如果不清楚,也可以使用for循环哈
        files.forEach(function(filename) {
            // 下面就是文件名称重命名
            // API文档中找到重命名的API,如下
            // fs.rename(oldPath, newPath, callback)      
            // 下面,我们就可以依葫芦画瓢,确定新旧文件名称:
            var oldPath = src '/' filename, newPath = src '/' filename.replace(/_/g, '-');
            // 重命名走起
            fs.rename(oldPath, newPath, function(err) {
                if (!err) {
                    console.log(filename '下划线替换成功!');
                }      
            })
        });
    });

    window系统例如,我们采取cmd可能PowerShell,在相应文件夹目录下实行下该JS文件:

    node underscore2dash

    1
    node underscore2dash

    结果:
    新葡亰496net 12

    那时候的文书夹的图样们:
    新葡亰496net 13

    此间的文件名批量替换不仅仅适用于图片,实际上适用于自便格式的文书。

    当前,对命名的批量管理不仅如此,还包蕴联合前缀(比方icon_*),此时只要把newPath =后满的代码改成src '/icon_' filename。或许非开拓供给,举个例子说批量下载的小摄像名称从1依次今后排,则……依然友好管理下吧,forEach措施第一个参数是数组序号值,能够直接拿来用,就当课后学业了,看好你呀!

    本文件夹批量管理例子,抛开详尽的笺注,差不离10行出头JS代码,用到的JS方法也都是十三分极度基本的,对啊,数组遍历forEach和字符替换replace格局,其余便是套API走套路,固然自个儿情人(非IT领域)亲自参预竞技,也都足以弄出来。轻易,何况风趣。

    自己猛烈提出大学的次序支付入门课程就学JavaScript,跑web网页,跑Node.js, 轻易且所见即所得,轻易激情学习的意趣,要比枯燥不知干嘛用的C语言更合乎大范围和入门。

    2:js文件:update-name.js

    语法:

    console.log("hello node.js")
    for(var i in console){
    console.log(i " " console[i])
    }
    node example.js。

    语法:

    三、蹩脚JS下的Node.js初体验二周目

    我们写页面实际的开销要求肯定不知文件批量重命名这么轻易,笔者清楚有三个须求点,特别平日写静态原型页面包车型大巴小同伴一定感兴趣的。

    尽管HTML页面也能够如动态语言,如php一样,各种模块能够直接include进去。以后布满存在那样二个难点,某项目,重构职员哗啦啦编写了20几个静态页面,可是,由于HTML无法直接include公用的头顶后面部分和左边栏,导致,那十八个页面包车型大巴头尾都是单独的,一般尾部内容发生了转移,呵呵,推断就要求助理编辑辑器来个批量交流什么的了。

    那是或不是痛点?显明是!凡事痛点都以能够做出贡献展现团结价值的地点。

    是的,大家办事就是纯属页面,大家的JS勉强能够扶上墙,但,就是这么的大家,只要您有其一心,意识到难点所在,同一时间领会Node.js能够帮您做到那或多或少,一个实用的工具其实早就形成了二分之一。参照API文书档案,东拼拼,西凑凑,鲜明可以弄出叁个起码本身用得很high的事物,剩下的六分之三就这么简轻松单续上了。

    实例示例暗暗表示
    有一个原本的HTML页面,头尾都利用了左近下边代码的正儿八经HTML5 import导入:

    <link rel="import" href="header.html"/>

    1
    <link rel="import" href="header.html"/>

    但是,实际上,rel="import"include是完全区别等的概念,import进去实际上是个单身的document!不过这是后话了,反正我们又不是一向浏览那一个页面,因而,大家不必在意这么些细节。

    新葡亰496net 14

    HTML多少个文件结构关系如下暗暗提示:
    新葡亰496net 15

    那时,大家就能够借助Node.js以及我们这点点JS知识,把rel="import"那行HTML替换来对应的导入的HTML页面内容。

    规律其实很简单:

    1. 读import-example.html页面;
    2. href="header.html"这行HTML替换成header.html的内容;
    3. 监察和控制import-example.html页面,一有变动,即时生成;
    4. done!

    上面为本例子的JS代码import.js:

    // 引进fs文件管理模块 var fs = require("fs"); // 测量试验用的HTML页文件夹地址和文件名称 var src = 'import', filename = 'import-example.html'; var fnImportExample = function(src, filename) { // 读取HTML页面数据 // 使用API文档中的fs.readFile(filename, [options], callback) fs.readFile(src '/' filename, { // 须要钦赐编码方式,不然重回原生buffer encoding: 'utf8' }, function(err, data) { // 上边要做的事体便是把 // // 这段HTML替换来href文件中的内容 // 能够求助万能的正则 var dataReplace = data.replace(//gi, function(matchs, m1) { // m1就是十一分的门路地址了 // 然后就足以读文件了 return fs.readFileSync(src '/' m1, { encoding: 'utf8' }); }); // 由于我们要把公文放在更上超级目录,因而,一些相对地址要管理下 // 在本例子中,就比较轻松,对../实行调换 dataReplace = dataReplace.replace(/"..//g, '"'); // 于是生成新的HTML文件 // 文书档案找一找,发掘了fs.writeFile(filename, data, [options], callback) fs.writeFile(filename, dataReplace, { encoding: 'utf8' }, function(err) { if (err) throw err; console.log(filename '生成成功!'); }); }); }; // 暗中认可先实施二次 fnImportExample(src, filename); // 监察和控制文件,改变后再度生成 fs.watch(src '/' filename, function(event, filename) { if (event == 'change') { console.log(src '/' filename '发生了退换,重新生成...'); fnImportExample(src, filename); } });

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    // 引入fs文件处理模块
    var fs = require("fs");
     
    // 测试用的HTML页文件夹地址和文件名称
    var src = 'import', filename = 'import-example.html';
     
    var fnImportExample = function(src, filename) {
        // 读取HTML页面数据
        // 使用API文档中的fs.readFile(filename, [options], callback)
        fs.readFile(src '/' filename, {
            // 需要指定编码方式,否则返回原生buffer
            encoding: 'utf8'
        }, function(err, data) {
            // 下面要做的事情就是把
            //
            // 这段HTML替换成href文件中的内容
            // 可以求助万能的正则
            var dataReplace = data.replace(//gi, function(matchs, m1) {
                // m1就是匹配的路径地址了
                // 然后就可以读文件了
                return fs.readFileSync(src '/' m1, {
                    encoding: 'utf8'
                });
            });
     
            // 由于我们要把文件放在更上一级目录,因此,一些相对地址要处理下
            // 在本例子中,就比较简单,对../进行替换
            dataReplace = dataReplace.replace(/"..//g, '"');
     
            // 于是生成新的HTML文件
            // 文档找一找,发现了fs.writeFile(filename, data, [options], callback)
            fs.writeFile(filename, dataReplace, {
                encoding: 'utf8'
            }, function(err) {
                if (err) throw err;
                console.log(filename '生成成功!');
            });
        });
    };
     
    // 默认先执行一次
    fnImportExample(src, filename);
     
    // 监控文件,变更后重新生成
    fs.watch(src '/' filename, function(event, filename) {
        if (event == 'change') {
            console.log(src '/' filename '发生了改变,重新生成...');
            fnImportExample(src, filename);
        }
    });

    我们那时候node run一下:

    node import

    1
    node import

    结果:
    新葡亰496net 16

    那时候的文件夹:
    新葡亰496net 17

    箭头所指正是新生成的HTML页面,此时的开始和结果是:
    新葡亰496net 18

    我们访谈此页面:
    新葡亰496net 19

    连广告都来得能够!

    这会儿,node实际上是实时监察和控制原始HTML是不是产生变化的,文书档案中的fs.watch()主意,举个例子,我们把图纸地址的mm1换来mm2,则:
    新葡亰496net 20

    那会儿页面变成了:
    新葡亰496net 21

    于是,二个每20日自动编写翻译import导入HTML页面包车型客车小工具的雏形就好了。

    页面重构的伴儿,就绝不忧郁20四个原型页面公用部分修改一回要改20多处的主题素材了,直接将公用的模块import进来,20三个页面分分钟编写翻译为HTML页面完全部。

    到现在,大家再向后看下面的HTML援助模块引进的小工具,就是多少个差不离的Node.js API和几行简单的JS. 大家又不是开源就和好用用,非常多头眼昏花气象根本就不用去思虑,所以,这么轻易就足足了!

     

    复制代码 代码如下:

    您相对不要在node.js使用alert举办调试,那是浏览器带的大局方法,不报错才怪。
    输出结果如下:

    复制代码 代码如下:

    四、结束语

    当项目不大的时候,当组织成员比较少的时候,当开垦同学不鸟你的时候,此时,要发扬团结入手,安家立业的神气。

    付出时候境遇痛点,也许认为温馨在做重复劳动的时候,想想看,是还是不是能够花点时间捣腾出贰个Node.js的小本子。

    毫不以为npm商旅里面包车型客车这几个工具好像很Diao很难搞,其实呢,也正是一丝丝基本加上应付各样地方弄出来的。由于我们是自娱自乐,追求的是急速高效,专注于前方义务功用,所以,大家如若把核心弄出来就好,而那一个基本往往就几行JS代码 多少个fs API就足以了。

    蚂蚁虽小,咬人也疼。所以,不要认为温馨JS比较菜,搞不来,就几行JS代码,你不出手搞一搞你怎么就明显呢?

    写CSS为主的前端想要今后迈入,未有比本文介绍内容更契合学习和入门的了。

    Try it!

    2 赞 7 收藏 3 评论

    新葡亰496net 22

    js文件代码:

    fs.rename(oldPath, newPath, [callback(err)])

    复制代码 代码如下:

    fs.appendFile(filename, data, [options], callback)

    // 引进fs文件管理模块
    var fs = require("fs");
    // 今后大家要关怀的是'icons'文件夹
    // 我们无妨用变量表示这些文件夹名称,方便日后保卫安全和管理
    var src = 'icons';

    由于该方法属于fs模块,使用前须要引进fs模块(var fs= require(“fs”) )

    var log = function () {
    process.stdout.write(format.apply(this, arguments) 'n');
    }
    var info = function () {
    process.stdout.write(format.apply(this, arguments) 'n');
    }
    var warn = function () {
    writeError(format.apply(this, arguments) 'n');
    }
    var error = function () {
    writeError(format.apply(this, arguments) 'n');
    }
    var dir = function (object) {
    var util = require('util');
    process.stdout.write(util.inspect(object) 'n');
    }
    var time = function (label) {
    times[label] = Date.now();
    }
    var timeEnd = function (label) {
    var duration = Date.now() - times[label];
    exports.log('undefined: NaNms', label, duration);
    }
    var trace = function (label) {
    // TODO probably can to do this better with V8's debug object once that is
    // exposed.
    var err = new Error;
    err.name = 'Trace';
    err.message = label || '';
    Error.captureStackTrace(err, arguments.callee);
    console.error(err.stack);
    }
    var assert = function (expression) {
    if (!expression) {
    var arr = Array.prototype.slice.call(arguments, 1);
    require('assert').ok(false, format.apply(this, arr));
    }
    }

    由于该办法属于fs模块,使用前须求引进fs模块(var fs = require(“fs”) )

    // API文书档案中中找到遍历文件夹的API
    // 找到了,是fs.readdir(path, callback)
    // 文书档案中有描述:
    // 读取 path 路线所在目录的剧情。 回调函数 (callback) 接受八个参数 (err, files) 个中 files 是二个囤积目录中所满含的文件名称的数组
    // 因此:
    fs.readdir(src, function(err, files) {
    // files是称呼数组,由此
    // 能够动用forEach遍历哈, 此处为ES5 JS一点知识
    // 借使不清楚,也足以应用for循环哈
    files.forEach(function(filename) {
    // 上面正是文件名称重命名
    // API文书档案中找到重命名的API,如下
    // fs.rename(oldPath, newPath, callback)
    // 上面,大家就能够依葫芦画瓢,分明新旧文件名称:
    var oldPath = src '/' filename,
    // newPath = src '/' filename.replace(/_/g, '-');
    newPath = src '/' filename "-20";

    收纳参数:

    透过这个函数,我们大致掌握到node.js在大局成效域增添了些什么,如require, process。但也不能够武断说是,因为它们或然是有些作用域的民用对象。可是,通晓这么些全局对象,并从那个目的上出发去精通任何对象,特别有助于咱们询问node.js的生态结构。在前者,每当浏览器进级,小编就遍历一下window对象以及其个因秋日点就识破它又追加了如何办法与质量,然后再查文档。那多少个更新日志不容许把一切细节都告知您的,必须和睦入手遍历一下,这样你就比人家知道得越来越多。好了,我们去找node.js的全局对象。
    node.js的文书档案告诉大家,有如下多少个全局对象:
    global, process, require,__filename,__dirname, module
    但大家为何能直接行使console.log呢?经验告诉我们,console确定是某全局对象的积极分子,正如大家可以alert, 也得以window.alert。好了,大家选遍历一下global那些名字获得特别蛮横的靶子

    收受参数:

    // 重命名走起
    fs.rename(oldPath, newPath, function(err) {
    if (!err) {
    console.log(filename '下划线替换来功!');
    }
    })
    });
    });

    oldPath                原路径

    复制代码 代码如下:

    1. filename {String}

    2. data {String | Buffer}

    3. options {Object}

    cd到文件路线,在巅峰实施命令: node update-name.js

    newPath              新路径

    for(var i in global){
    console.log("var " i " = " global[i])
    }

          encoding {String | Null} default = ‘utf8′

    callback               回调,传递一个err万分参数

    结果如下:

          mode {Number} default = 438 (aka 0666 in Octal)

    例子:

    复制代码 代码如下:

          flag {String} default = ‘a'

    复制代码 代码如下:

    var global = [object global]
    var process = [object EventEmitter]
    var GLOBAL = [object global]
    var root = [object global]
    var Buffer = function Buffer(subject, encoding, offset) {
    //太长了,省略
    }
    var setTimeout = function () {
    var t = NativeModule.require('timers');
    return t.setTimeout.apply(this, arguments);
    }
    var setInterval = function () {
    var t = NativeModule.require('timers');
    return t.setInterval.apply(this, arguments);
    }
    var clearTimeout = function () {
    var t = NativeModule.require('timers');
    新葡亰496net:叁个轻易的页面输出完成代码,rename方法运用验证。return t.clearTimeout.apply(this, arguments);
    }
    var clearInterval = function () {
    var t = NativeModule.require('timers');
    return t.clearInterval.apply(this, arguments);
    }
    var console = [object Object]

    1. 新葡亰496net:叁个轻易的页面输出完成代码,rename方法运用验证。callback {Function}

    //同以目录下的文书更名:
    var fs = require('fs');
    fs.rename('125.txt','126.txt', function(err){
     if(err){
      throw err;
     }
     console.log('done!');
    })
     
    //差异渠道下的文件更名 移动:(新的路径必须已存在,路线官样文章会回去非凡)
    var fs = require('fs');
    fs.rename('125.txt','new/126.txt', function(err){
     if(err){
      throw err;
     }
     console.log('done!');
    })

    意识global与浏览器的window同样,皆有个针对自己的同名成员。window === window.window, global === global.global。但node.js开始的一段时代设计得不得了,又一搞了个多余的GLOBAL成员。
    console.log(global === global.global)//true
    console.log(global === global.GLOBAL)//true
    大家再遍历module对象:

    例子:

    源码:

    复制代码 代码如下:

    复制代码 代码如下:

    复制代码 代码如下:

    for(var i in module){
    console.log("var " i " = " module[i])
    }

    var fs = require("fs");
    fs.appendFile('message.txt', 'data to append', function (err) {
      if (err) throw err;
      console.log('The "data to append" was appended to file!');
    });

    fs.rename = function(oldPath, newPath, callback) {
      callback = makeCallback(callback);
      if (!nullCheck(oldPath, callback)) return;
      if (!nullCheck(newPath, callback)) return;
      binding.rename(pathModule._makeLong(oldPath),
                     pathModule._makeLong(newPath),
                     callback);
    };

    结果如下:

    源码:

    你或然感兴趣的篇章:

    • Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
    • node.js中的fs.renameSync方法运用表达
    • node.js用fs.rename强制重命名或活动文件夹的方式

    复制代码 代码如下:

    复制代码 代码如下:

    var id = .
    var exports = [object Object]
    var parent = null
    var filename = /home/cheng19840218/node/example.js
    var loaded = false
    var exited = false
    var children =
    var paths = /home/cheng19840218/node/node_modules,/home/cheng19840218/node_modules,/home/node_modules,/node_modules
    var load = function (filename) {
    //太长了,省略
    }
    var _compile = function (content, filename) {
    //太长了,省略
    }

    fs.appendFile = function(path, data, options, callback_) {
      var callback = maybeCallback(arguments[arguments.length - 1]);
      if (util.isFunction(options) || !options) {
        options = { encoding: 'utf8', mode: 438 /*=0666*/, flag: 'a' };
      } else if (util.isString(options)) {
        options = { encoding: options, mode: 438, flag: 'a' };
      } else if (!util.isObject(options)) {
        throw new TypeError('Bad arguments');
      }
      if (!options.flag)
        options = util._extend({ flag: 'a' }, options);
      fs.writeFile(path, data, options, callback);
    };

    原来老大盛名的exports是在此提供的,__filename大约也是filename的引用。只要遍历一下,你就开掘比非常多旧事物。但别感到一下地下就暴露在您眼帘下,还也会有多数不行遍历属性。比如上面小编遍历global对象,唯有尞尞可数多少个成员,大家能够运用ecma262v5新添的不二等秘书诀去考察一下:
    console.log(Object.getOwnPropertyNames(global))
    结果如下:

    你可能感兴趣的作品:

    • node.js用fs.rename强制重命名或运动文件夹的措施
    • node.js基于fs模块对系统文件及目录举行读写操作的格局详解
    • 听别人说node.js的fs宗旨模块读写文件操作(实例讲明)
    • node.js中fs.stat与fs.fstat的分别详解
    • 浅谈Node.js:fs文件系统模块
    • node.js中的fs.chmodSync方法应用表明
    • node.js中的fs.chmod方法运用表达
    • node.js中的fs.appendFileSync方法运用表明
    • node.js中的fs.createWriteStream方法运用验证
    • node.js中的fs.futimesSync方法应用验证
    • node.js中fs文件系统目录操作与公事音讯操作

    复制代码 代码如下:

    [ 'clearInterval',
    'TypeError',
    'decodeURI',
    'Buffer',
    'parseFloat',
    'Number',
    'URIError',
    'encodeURIComponent',
    'RangeError',
    'ReferenceError',
    'RegExp',
    'Array',
    'isNaN',
    'setTimeout',
    'console',
    'Date',
    'Infinity',
    'Boolean',
    'Error',
    'root',
    'NaN',
    'String',
    'Function',
    'Math',
    'undefined',
    'encodeURI',
    'escape',
    'unescape',
    'process',
    'decodeURIComponent',
    'EvalError',
    'clearTimeout',
    'GLOBAL',
    'setInterval',
    'SyntaxError',
    'Object',
    'eval',
    'global',
    'parseInt',
    'JSON',
    'isFinite' ]

    很四个人学node.js就立刻看其文书档案,殊不知node.js本身所正视的V8引擎就有着众多要学的事物,这里面囊括ecma262v5带来的新办法新对象,还使得仿firefox的部分语法:
    __defineGetter__
    __defineSetter__
    __lookupGetter__
    __lookupSetter__
    set
    get
    __proto__
    不过以"__"开端的事物笔者是不提出用的,像set与get今后风靡的浏览器都帮衬,如IE9,能够在其开辟人士工具下试试下边包车型客车本子:

    复制代码 代码如下:

    var a = {
    get latest () {
    if (this.log.length > 0) {
    return this.log[this.log.length - 1];
    }
    else {
    return null;
    }
    },
    log: []
    }
    a.log[0] = "a";
    a.log[1] = "b";
    console.log(a.latest)

    在node.js基本上未有包容难点(假诺您不是从初期的node.js玩起来),何况原生对象又加了如此多扩展,再增加node.js自带的库,每一种模块都提供了花样好些个的API,假设还嫌相当不足,github上还恐怕有上千个插件。对于想向尝试一下后端编制程序的JSer来讲,那是极具魅力的。大概有些许人会说,后端不是关乎数据库操作吗?那与比前端的DOM包容比起来,不足挂齿。还只怕有怎么样文件夹与公事操作 ,你就当成是一种非常的数组操作正是。因而你一丝一毫能够义愤填膺!
    好了,大家来点实质的剧情呢。node.js本来便是二个http服务器,它是要与前面一个交互的,由此少不了八个对象:央浼(request)与响应(response)。央浼与响应明显一种异步的事物,因为大家不清楚前端哪一天发诉求过来,响应也无法马上给前端,还要做日志,读写数据库等操作呢。由此对此javascript来讲,那用回调函数来完毕最棒。那么由誰来经受那些回调呢?贰个服务器对象!

    复制代码 代码如下:

    var http = require("http");
    http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello node.js");
    response.end();
    }).listen(8888);

    node.js有个例外的require,用于共同加载其余模块的对象,那与别的语言的require, import大概。能一同正是好,不像前面三个那样一层套一层。然后接纳贰个函数去实例化二个服务器对象,然后监听8888端口。那是node.js官方网址最初的例子,咱们都写烂了。但这么的主次在切实可行中错误,我们在地方栏上输入U奥迪Q7L,你足足要回到三个一体化页面给自个儿吗!
    对此,我们先是要举行模块化。模块化是以文件为单位的,把example.js更名字为server.js,然后再把内部的从头到尾的经过改为一个模块。对于八个node.js的文本,其实它里面包车型地铁剧情是在多少个密闭的条件中实行。要想分享给其余模块使用,就无法不绑定在exports对象上。

    复制代码 代码如下:

    var http = require("http");
    exports.start = function(){
    http.createServer(function(request, response) {
    console.log("Request received...");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello node.js");
    response.end();
    }).listen(8888);
    console.log("server start...");
    }

    接下来我们再建三个index.js作为入口(index.js与server.js放在同等目录下)。

    复制代码 代码如下:

    var server = require("./server");
    server.start();

    下一场建八个index.html页面。

    复制代码 代码如下:

    <!doctype html>
    <html>
    <head>
    <title>index</title>
    <meta content="IE=8" http-equiv="X-UA-Compatible"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    </head>
    <body>
    <h2>这是首页</h2>
    </body>
    </html>

    后天我们就在要要求过来时,把此页的剧情读出来,返给用户。这时大家将在用到fs模块的必经之路了。

    复制代码 代码如下:

    var http = require("http");
    var fs = require('fs');
    exports.start = function(){
    http.createServer(function(request, response) {
    fs.readFile('./index.html', 'utf-8',function (err, data) {//读取内容
    if (err) throw err;
    response.writeHead(200, {"Content-Type": "text/html"});//注意这里
    response.write(data);
    response.end();
    });
    }).listen(8888);
    console.log("server start...");
    }

    好了,这时大家重启再度输入地方,就看出贰个完整的页面了。
    但多个页面除了HTML结构层外,还应该有javascript与css。那么,大家在当前目录建三个文本夹javascripts, 里面建index.js,内容如下:

    复制代码 代码如下:

    window.onload = function(){
    var p = document.createElement("p");
    p.innerHTML = "那是动态拉长的"
    document.body.appendChild(p);
    }

    再建三个styles目录,里面建index.css,内容如下:

    复制代码 代码如下:

    html,body{
    background: #3671A5;
    height: 100%
    }

    下一场在index.html引进那七个文本:

    复制代码 代码如下:

    <!doctype html>
    <html>
    <head>
    <title>index</title>
    <meta content="IE=8" http-equiv="X-UA-Compatible"/>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link type="text/css" rel="stylesheet" href="styles/index.css"/>
    <script src="/javascripts/index.js"></script>
    </head>
    <body>
    <h2>那是首页</h2>
    </body>
    </html>

    再也展开,开掘未有变动,google,说要管理js与css文件的伏乞。未有章程,获得request.url属性,再剖断后缀名,为它举行理文件件读取与安装首部。

    复制代码 代码如下:

    var http = require("http");
    var fs = require('fs');
    var url = require('url');
    exports.start = function(){
    http.createServer(function(request, response) {
    var pathname = url.parse(request.url).pathname;
    var ext = pathname.match(/(.[^.] |)$/)[0];//获得后缀名
    switch(ext){
    case ".css":
    case ".js":
    fs.readFile("." request.url, 'utf-8',function (err, data) {//读取内容
    if (err) throw err;
    response.writeHead(200, {
    "Content-Type": {
    ".css":"text/css",
    ".js":"application/javascript",
    }[ext]
    });
    response.write(data);
    response.end();
    });
    break;
    default:
    fs.readFile('./index.html', 'utf-8',function (err, data) {//读取内容
    if (err) throw err;
    response.writeHead(200, {
    "Content-Type": "text/html"
    });
    response.write(data);
    response.end();
    });
    }
    }).listen(8888);
    console.log("server start...");
    }

    新葡亰496net 23 
    从那之后,本文的指标达到了。多个node.js文件,多少个常见的js文件,三个css文件,三个html文件。下八个目标正是多页了,二个网址是由五个目标构成的。它包罗如下内容,能管理ajax要求,上传文件,Session与Cookie扶助,日志,MIME识别,路由派发,缓存系统......要做的事多得可怕,因而有人一上来就框架,与学JS那样,连API还从未摸熟就用jQuery了,那学个毛!回想一下大家地点的server.js中间的一部分,其实就要把MIME与路由拆分出来的。但最关键的事还有平等,如何管理那不断函数嵌套?本人以为那与自个儿的模块加载系统还未曾什么两样,后一次就从此间入手吧。

    你可能感兴趣的篇章:

    • 一行命令解决node.js 版本升级
    • 跟小编学Nodejs(一)--- Node.js简单介绍及安装开荒情状
    • Node.js(安装,启动,测试)
    • Node.js实战 创建轻巧的Web服务器
    • node.js Ajax实现获取HTTP服务器再次回到数据
    • Node.js文件操作详解
    • node.js中的http.request方法运用表明
    • node.js 开垦指南 – Node.js 连接 MySQL 并进行数据库操作
    • NODE.JS加密模块CPAJEROYPTO常用艺术介绍
    • 计算几道关于Node.js的面试题目

    本文由新葡亰496net发布于新葡亰官网,转载请注明出处:新葡亰496net:叁个轻易的页面输出完成代码,r

    关键词: