博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript全面学习(node.js)
阅读量:4950 次
发布时间:2019-06-11

本文共 4901 字,大约阅读时间需要 16 分钟。

1.在Node交互式环境下,我们可以输入JavaScript代码并立刻执行,立即看到结果。按两次CTRL+C可以退出编辑。

   在命令行模式下,要node ,然后输入带.js的文件。这个JS文件里面要console.log(),才能在命令行看到结果

2.hello.js

'use strict';var s = 'Hello';function greet(name) {    console.log(s + ', ' + name + '!');}module.exports = greet;   // 把函数greet作为模块的输出暴露出去,这样其他模块就可以使用greet函数

main.js

'use strict';// 引入hello模块:var greet = require('./hello');   // main.js和hello.js位于同一个目录,所以一个点var s = 'Michael';greet(s); // Hello, Michael!

在nodejs中每个.js文件都是一个模块,它们内部各自使用的变量名和函数名都互不冲突

在浏览器中,如果在a.js中使用了全局变量s,那么,在b.js中也使用全局变量s,将造成冲突

3.在浏览器中,有且仅有一个全局对象,window。在node.js中,也只有一个,global

  process对象代表当前Node.js进程

  如果我们想要在下一次事件响应中执行代码,可以调用process.nextTick()

// test.js// process.nextTick()将在下一轮事件循环中调用:process.nextTick(function () {    console.log('nextTick callback!');});console.log('nextTick was set!');/*输出:nextTick was set!nextTick callback!*/

4.

// 程序即将退出时执行回调函数:process.on('exit', function (code) {    console.log('about to exit with code: ' + code);});

5.判断JavaScript执行环境是浏览器还是node.js

if (typeof(window) === 'undefined') {    console.log('node.js');} else {    console.log('browser');}

6.fs模块就是文件系统模块,负责读写文件,同时提供了异步和同步的方法。

  异步方法:执行IO操作时,JavaScript代码无需等待,而是传入回调函数后,继续执行后续JavaScript代码

$.getJSON('http://example.com/ajax', function (data) {    console.log('IO结果返回后执行...');});console.log('不等待IO结果直接执行后续代码...');

同步方法:需要等待函数返回。同步操作的好处是代码简单,缺点是程序将等待IO操作,在等待时间内,无法响应其它任何事件。

// 根据网络耗时,函数将执行几十毫秒~几秒不等:var data = getJSONSync('http://example.com/ajax');

7.异步读取一个文本文件:

'use strict';var fs = require('fs');fs.readFile('sample.txt', 'utf-8', function (err, data) {   //sample.txt文件必须在当前目录下,且文件编码为utf-8    if (err) {        console.log(err);    } else {        console.log(data);    }});

正常读取时,err参数为nulldata参数为读取到的String

读取错误时,err参数代表一个错误对象,dataundefined

Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果。

8.异步读取一个图片文件:

'use strict';var fs = require('fs');fs.readFile('sample.png', function (err, data) {    if (err) {        console.log(err);    } else {        console.log(data);     //回调函数的data参数将返回一个Buffer对象        console.log(data.length + ' bytes');     }});

把一个Buffer对象转换成String:

// Buffer -> Stringvar text = data.toString('utf-8');console.log(text);

把一个String转换成Buffer

// String -> Buffervar buf = new Buffer(text, 'utf-8');console.log(buf);

9.同步读取一个文本文件:

'use strict';var fs = require('fs');var data = fs.readFileSync('sample.txt', 'utf-8');  //多了一个Sync后缀,并且不接收回调函数,函数直接返回结果console.log(data);

如果同步读取文件发生错误,则需要用try...catch捕获该错误:

try {    var data = fs.readFileSync('sample.txt', 'utf-8');    console.log(data);} catch (err) {    // 出错了}

10.将数据写入文件通过fs.writeFile()实现:

'use strict';var fs = require('fs');var data = 'Hello, Node.js';fs.writeFile('output.txt', data, function (err) {    if (err) {        console.log(err);    } else {        console.log('ok.');    }});

同步方法:

'use strict';var fs = require('fs');var data = 'Hello, Node.js';fs.writeFileSync('output.txt', data);

11.如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),返回一个Stat对象:

'use strict';var fs = require('fs');fs.stat('sample.txt', function (err, stat) {    if (err) {        console.log(err);    } else {        // 是否是文件:        console.log('isFile: ' + stat.isFile());        // 是否是目录:        console.log('isDirectory: ' + stat.isDirectory());        if (stat.isFile()) {            // 文件大小:            console.log('size: ' + stat.size);            // 创建时间, Date对象:            console.log('birth time: ' + stat.birthtime);            // 修改时间, Date对象:            console.log('modified time: ' + stat.mtime);        }    }});/*结果如下:isFile: trueisDirectory: falsesize: 181birth time: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)modified time: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)*/

因为node.js绝大部分是需要在服务器运行期反复执行业务逻辑的代码,必须使用异步代码

 

12.stream是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。

    data事件表示流的数据已经可以读取了,end事件表示这个流已经到末尾了,没有数据可以读取了,error事件表示出错了。

  从文件流读取文本内容:

'use strict';var fs = require('fs');// 打开一个流:var rs = fs.createReadStream('sample.txt', 'utf-8');rs.on('data', function (chunk) {   // data事件可能会有多次    console.log('DATA:')    console.log(chunk);});rs.on('end', function () {    console.log('END');});rs.on('error', function (err) {    console.log('ERROR: ' + err);});

 

13.以流的形式写入文件:

'use strict';var fs = require('fs');var ws1 = fs.createWriteStream('output1.txt', 'utf-8');ws1.write('使用Stream写入文本数据...\n');ws1.write('END.');ws1.end();var ws2 = fs.createWriteStream('output2.txt');ws2.write(new Buffer('使用Stream写入二进制数据...\n', 'utf-8'));ws2.write(new Buffer('END.', 'utf-8'));ws2.end();

所有可以读取数据的流都继承自stream.Readable,所有可以写入的流都继承自stream.Writable

14.Readable流有一个pipe()方法,把Readable流和一个Writable流串起来后,使所有的数据自动从Readable流进入Writable

   源文件的所有数据就自动写入到目标文件

'use strict';var fs = require('fs');var rs = fs.createReadStream('sample.txt');var ws = fs.createWriteStream('copied.txt');rs.pipe(ws);     //把rs里面的内容写入ws,即sample.txt不变

 

  当Readable流的数据读取完毕,end事件触发后,将自动关闭Writable流。如果我们不希望自动关闭Writable流,需要传入参数:

readable.pipe(writable, { end: false });

 

转载于:https://www.cnblogs.com/shen076/p/6193367.html

你可能感兴趣的文章
BZOJ 3943 [Usaco2015 Feb]SuperBull:最大生成树
查看>>
ueditor 控制上传图片的显示尺寸
查看>>
poj 1920 Towers of Hanoi
查看>>
第二十三模板 13模板成员
查看>>
oracle为IN OUT变量或OUT变量赋值时提示“表达式''不能用作赋值目标”
查看>>
AWS AppSync 的基本语句
查看>>
Ubuntu 使用unzip解压乱码的问题
查看>>
[转发]iptables中DNAT与SNAT的理解
查看>>
ListView显示不同行以及数据重用
查看>>
12-五子棋游戏:享元模式
查看>>
css3系列之详解border-radius
查看>>
团队—科学计算器——项目进度
查看>>
Django的url规则
查看>>
iOS并发编程笔记【转】
查看>>
泛型 T的定义<1>
查看>>
thinkphp dispaly和fetch的区别
查看>>
08号团队-团队任务5:项目总结会
查看>>
mybatis 插入数据 在没有commit时 获取主键id
查看>>
SQL2005 删除空白行null
查看>>
lightoj 1030 概率dp
查看>>