您可以通过左右滑屏查看更多笔记内容。。
'use strict';
console.log('Hello, world.');//保存文件为.js格式
'use strict';
是因为我们总是以严格模式运行JavaScript代码,避免各种潜在陷阱。一种模块加载机制。在这个规范下,每个.js
文件都是一个模块,它们内部各自使用的变量名和函数名都互不冲突,例如,hello.js
和main.js
都可以申明全局变量var s = 'xxx'
,且互不影响。
要在模块中对外输出变量,用:
module.exports = variable;
输出的变量可以是任意对象、函数、数组等等。
要引入其他模块输出的对象,用:
var foo = require('other_module');
引入的对象具体是什么,取决于引入模块输出的对象。
// hello.js
function hello() {
console.log('Hello, world!');
}
function greet(name) {
console.log('Hello, ' + name + '!');
}
方法一:对module.exports赋值:
module.exports={greet,hello}
module.exports = {
hello: hello,
greet: greet
};
//方法二:直接使用exports:
exports.hello = hello;
exports.greet = greet;
原因分析:默认情况下,Node准备的exports变量和module.exports变量实际上是同一个变量,并且初始化为空对象{},于是,我们可以写:
exports.foo = function () { return 'foo'; };
exports.bar = function () { return 'bar'; };
或者-----》
module.exports.foo = function () { return 'foo'; };
module.exports.bar = function () { return 'bar'; };
如果我们要输出的是一个函数或数组,那么,只能给module.exports
赋值:
module.exports = function () { return 'foo'; };
global: Node.js环境中的全局对象;>global.console
process:Node.js提供的一个对象,它代表当前Node.js进程:
> process === global.process;
true
> process.version;
'v5.2.0'
> process.platform;
'darwin'
> process.arch;
'x64'
> process.cwd(); //返回当前工作目录
'/Users/michael'
> process.chdir('/private/tmp'); // 切换当前工作目录
undefined
> process.cwd();
'/private/tmp'
JavaScript程序是由事件驱动执行的单线程模型,Node.js也不例外。Node.js不断执行响应事件的JavaScript函数,直到没有任何响应事件的函数可以执行时,Node.js就退出了。
如果我们想要在下一次事件响应中执行代码,可以调用process.nextTick()
:
如果我们响应exit
事件,就可以在程序即将退出时执行某个回调函数:
//process.nextTick()将在下一轮事件循环中调用;
process.nextTick(function(){
console.log('nextTick callback!');
});
console.log('nextTick was set!');
//程序即将退出时的回调函数
process.on('exit',function(code){
console.log('about to exit with code'+code);
});
lixuehe@lixuehe-ThinkPad-T420:~/workspace/NodeJs-01$ node test.js
nextTick was set!
nextTick callback!
about to exit with code0
判断JavaScript代码到底是在什么环境下执行的,常用的方式就是根据浏览器和Node环境提供的全局变量名称来判断:
if (typeof(window) === 'undefined') {
console.log('node.js');
} else {
console.log('browser');
}
### 文件读取
#### –异步文件读取
fs.readFile()
(参数:文件名,编码格式(选),回调函数)
Node.js标准的回调函数:第一个参数代表错误信息,第二个参数代表结果
'use strict';
//读取一个text 文件的内容
var fs = require('fs');
//必须要传入编码格式:utf-8
fs.readFile('sample.txt', 'utf-8', function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
当正常读取时,err参数为null,data参数为读取到的String。当读取发生错误时,err参数代表一个错误对象,data为undefined;
'use strict';
//读取一个图片文件
var fs = require('fs');
//不需要传入编码格式
fs.readFile('sample.png', function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
console.log(data.length + ' bytes');
}
});
回调函数的data参数将返回一个Buffer对象。在Node.js中,Buffer对象就是一个包含零个或任意个字节的数组(注意和Array不同)
Buffer对象和String转换:
Buffer–>String
var text = data.toString('utf-8');
console.log(text);
String–>Buffer
var buf = Buffer.from(text, 'utf-8');
console.log(buf);
#### –同步文件读取
同步读取的函数和异步函数相比,多了一个Sync
后缀,并且不接收回调函数,函数直接返回结果。
'use strict';
//同步读取一个文本文件的代码
var fs = require('fs');
var data = fs.readFileSync('sample.txt', 'utf-8');
console.log(data);
如果同步读取文件发生错误,则需要用try...catch
捕获该错误:
try {
var data = fs.readFileSync('sample.txt', 'utf-8');
console.log(data);
} catch (err) {
// 出错了
}
### 文件写入
通过fs.writeFile()
实现的:writeFile()
的参数依次为文件名、数据和回调函数。
Buffer
,则写入的是二进制文件;err
参数;案例:
```
'use strict';
//将Hello,Node,js 写入outout,txt这个为文本文件中,文件没有先创建;
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.');
}
});
```
同步文件写入: 同步方法:writeFileSync()
'use strict';
var fs = require('fs');
var data = 'Hello, Node.js';
fs.writeFileSync('output.txt', data);
### 其他属性
### stat
如果我们要获取文件大小,创建时间等信息,可以使用fs.stat()
,它返回一个Stat
对象,能告诉我们文件或目录的详细信息:
stat()
也有一个对应的同步函数statSync()
;
案例:
'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: true
isDirectory: false
size: 181
birth time: Fri Dec 11 2015 09:43:41 GMT+0800 (CST)
modified time: Fri Dec 11 2015 12:09:00 GMT+0800 (CST)
## 注意:
由于Node环境执行的JavaScript代码是服务器端代码,所以,绝大部分需要在服务器运行期反复执行业务逻辑的代码,必须使用异步代码,否则,同步代码在执行时期,服务器将停止响应,因为JavaScript只有一个执行线程。**
#### stream
stream
是Node.js提供的又一个仅在服务区端可用的模块,目的是支持“流”这种数据结构。
标准输入流(stdin):敲键盘的时候,就可以把每个字符依次连起来,看成字符流。这个流是从键盘输入到应用程序;
data
事件表示流的数据已经可以读取了,end
事件表示这个流已经到末尾了,没有数据可以读取了,error
事件表示出错了。问题
!(/home/lixuehe/.config/Typora/typora-user-images/1564019695650.png)