澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站:appendFile方法使用说明,

2019-08-03 作者:澳门新萄京赌场网址   |   浏览(188)

JS一般般的网页重构可以使用Node.js做些什么

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

原作出处: 张鑫旭(@张鑫旭)   

D:nodeupdate_name目录有如下文件:

措施求证:

设置进程就隐瞒了。假若成功是能应用node的指令。node.js调节和测验是特别方便的。每种后台语言都有三个向那一个黑黢黢的支配台团输出语用的一声令下。node.js沿用FF那套东西,也正是console对象与其形式。大家率先建四个example.js文件,内容如下,然后在调节台展开它。

格局求证:

一、非Computer背景前端怎么焦急速精通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代码,双击是从没有过用的!

澳门新萄京官方网站 1

笔者们能够张开命令行工具,cd到内定目录,然后输入(假诺JS文件名叫test.js):

node test

1
node test

然后test.js里头的代码就能够高兴地跑起来啦!

对于“页面仔”来说,明白那样多就够了!

  1. 安装后Node.js环境;
  2. 用我们蹩脚的JS写一个不行处理的.js文件;
  3. node执行下。

简轻易单三部曲,我们就变身成了有着开辟味道的前端从业职员了。澳门新萄京官方网站 2

1:文件夹:icons

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

复制代码 代码如下:

该情势以异步的秘诀将 data 插入到文件里,假若文件不真实会自动创造。data能够是狂妄字符串大概缓存。

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

绝大数厂子都以小厂,非常的大多数小厂都独有三个前端,非常多前端的JS其实都相似般。

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

“前端化解方案”是好,不过,若是真的关心行当发展,应该精通,能够在贰个大共青团和少先队里面玩耍的实在是小片段人,有比相当多过多的小同伴都以单刀赴会,那套东西只怕反而阻挠了长足和灵活;有成都百货上千居多的伴儿在二三四线城市,是野生的前端开荒,底子非常不足,这套庞杂的东西很难理解;有广大众多的花色就是多少个静态活动页面,没要求回回使用高射炮打蚊子。

此时,往往必要的是定制化很强的小而美的拍卖。有同学大概会思疑,哎哎,笔者JS水平相比较菜,自造工具这种事情会不会有一点点基本啊。实际上,就算你JS一般般,借助Node.js营造一些小工具升高本身的前端开荒效用这种业务,完全不言自明。

前边三个那东西,有个博尔特都认账的特点,正是上心灵!

首先,大家必要一份Node.js API文书档案,我们运用“动物寻觅”,搜一下:
澳门新萄京官方网站 3

就率先个吗,走入会看出一长排的API列表内容: 澳门新萄京官方网站 4

永不怕,我们只需求这些就足以,没有错,就一个文件系统(fs)!澳门新萄京官方网站 5 别的都不要求管,那个都以门到户说游戏发烧友玩的:
澳门新萄京官方网站 6

点击去,又是贪滥无厌洒洒,一批API:澳门新萄京官方网站 7
澳门新萄京官方网站 8

永不怕,大家只须求……淡定,不是三个,是多少个正规的增删读写重命名文件就能够了。澳门新萄京官方网站 9

好了,然后只必要或多或少不好的JS,大家就足以玩起来了。

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

设计员给的Logo重命名
下大力的设计员送来了香饽饽的小图片素材,不过,连接字符是下划线_,恰巧,此时,前端童鞋的处女病发错,其余自个儿管理的图样全部都是短横线-连接的,这里Logo全部是下划线受持续,想要全体轮换为短横线,怎么做?

澳门新萄京官方网站 10

若是就一七个Logo幸而,大不断手动修改,可是,若是如上截图,设计员一口气给了伍拾五个Logo,我去,要改到头皮发麻了啊~倒不是岁月难点,而是重复劳动带来的这种枯燥和不喜悦会潜濡默化工作的Haoqing,何况这种勤奋用完就没了,不能复用,且不能够当做业绩(作者得以5分钟成功九十九个文本的重命名,有个卵用~)。

这时,Node.js就足以闪亮登台了,有了Node.js情状,大家假如寥寥几行JS代码,就足以完全秒杀了,比相当粗略,读取文件夹里面的具有图片,然后把称呼里面有着的下划线_替换来短横线-, 假设大家的.js文件和供给管理的小Logo文件夹结构如下:
澳门新萄京官方网站 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

结果:
澳门新萄京官方网站 12

这儿的文书夹的图样们:
澳门新萄京官方网站 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!可是那是后话了,反正大家又不是一贯浏览那一个页面,由此,我们不要在意这几个细节。

澳门新萄京官方网站 14

HTML多少个文件结构涉及如下暗中表示:
澳门新萄京官方网站 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

结果:
澳门新萄京官方网站 16

那时的文本夹:
澳门新萄京官方网站 17

箭头所指就是新生成的HTML页面,此时的源委是:
澳门新萄京官方网站 18

我们访谈此页面:
澳门新萄京官方网站 19

连广告都来得能够!

那儿,node实际上是实时监察原始HTML是不是发生变化的,文书档案中的fs.watch()艺术,举个例子,我们把图纸地址的mm1换到mm2,则:
澳门新萄京官方网站 20

那儿页面形成了:
澳门新萄京官方网站 21

于是,三个时时自动编写翻译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 评论

澳门新萄京官方网站 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));
}
澳门新萄京官方网站:appendFile方法使用说明,JS一般般的网页重构可以使用Node。}

由于该方法属于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])
}

澳门新萄京官方网站:appendFile方法使用说明,JS一般般的网页重构可以使用Node。      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');
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. 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官方网址最初的例证,大家都写烂了。但诸有此类的顺序在切切实实中错误,大家在地点栏上输入UQashqaiL,你至少要回到七个安然无恙页面给自个儿啊!
对此,我们第一要开展模块化。模块化是以文件为单位的,把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...");
}

澳门新萄京官方网站 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加密模块C奇骏YPTO常用艺术介绍
  • 小结几道关于Node.js的面试标题

本文由澳门新萄京官方网站发布于澳门新萄京赌场网址,转载请注明出处:澳门新萄京官方网站:appendFile方法使用说明,

关键词: