1.关键字
工程目录
npm与第三方库(递归依赖)
npm install node-echo -g
参数中的-g表示全局安装,因此node-echo会默认安装到以下位置,并且NPM会自动创建好Linux系统下需
要的软链文件或Windows系统下需要的.cmd文件。
2.回调函数与等待
Stream基于事件机制工作,代码中data事件会源源不断地被触发,不管doSomething函数是否处理得过来
var rs = fs.createReadStream(src);
rs.on('data', function (chunk) {//data事件
rs.pause();
doSomething(chunk, function () {
rs.resume();
});
});
rs.on('end', function () {
cleanUp();
});
3.文件拷贝程序与事件机制实践
var rs = fs.createReadStream(src);
if (ws.write(chunk) === false) {
rs.pause();
}
});
rs.on('end', function () {
ws.end();
});
ws.on('drain', function () {
rs.resume();
});
根据drain事件来判断什么时候只写数据流已经将缓存中的数据写入目标,可以传入下一个待写数据了
例如上边的大文件拷贝程序,NodeJS直接提供了.pipe方法来做这件事情,其内部实现方式与上边的代码类似
4.文件系统使用
文件属性读写。
其中常用的有fs.stat、fs.chmod、fs.chown等等。
文件内容读写。
其中常用的有fs.readFile、fs.readdir、fs.writeFile、fs.mkdir等等。
底层文件操作。
其中常用的有fs.open、fs.read、fs.write、fs.close等等。
NodeJS最精华的异步IO模型在fs模块里有着充分的体现,例如上边提到的这些API都通过回调函数传递结果。以fs.readFile为例:
fs.readFile(pathname, function (err, data) {
if (err) {
// Deal with error.
} else {
// Deal with data.
}
});
如上边代码所示,基本上所有fs模块API的回调参数都有两个。第一个参数在有错误发生时等于异常对象,第二个参数始终用于返回API方法执行结果。
此外,fs模块的所有异步API都有对应的同步版本,用于无法使用异步操作时,或者同步操作更方便时的情况。同步API除了方法名的末尾多了一个Sync之外,异常对象与执行结果的传递方式也有相应变化。同样以fs.readFileSync为例:
try {
var data = fs.readFileSync(pathname);
// Deal with data.
} catch (err) {
// Deal with error.
}
5.网络操作
请求:
var options = {
hostname: 'www.example.com',
port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
var request = http.request(options, function (response) {});
request.write('Hello World');//发送请求
request.end();
便捷的get api
http.get('http://www.baidu.com', function (response) {//必须包含http等详细地址
console.log(response.headers);
response.on('data', function (chunk) {
body.push(chunk);
});
response.on('end', function () {
body = Buffer.concat(body);
console.log(body.toString());
});
});
应答:
http.createServer(function (request, response) {
var body = [];
console.log(request.method);
console.log(request.headers);
request.on('data', function (chunk) {
body.push(chunk);
});
request.on('end', function () {//本函数须对端执行request.end();才会触发事件
body = Buffer.concat(body);
console.log('cws');
console.log(body.toString());
});
}).listen(80);
5.
处理HTTP请求时url模块使用率超高,因为该模块允许解析URL、生成URL,以及拼接URL
querystring模块用于实现URL参数字符串与参数对象的互相转换
zlib模块提供了数据压缩和解压的功能。当我们处理HTTP请求和响应时,可能需要用到这个模块
request和response对象除了用于读写头数据外,都可以当作数据流来操作
request.on('data', function (chunk) {
body.push(chunk);
});
6.异步回调编程
fn2('input', function (output2) {
fn1(output2, function (output1) {
// Do something.
});
});
fn2的返回值是output2?
request.on('data', function (chunk) {
body.push(chunk);
});
request.on('data')的返回值传给function
7.REPL:指在线的开发环境
8.事件循环与回调的区别?
9.事件发射器 事件循环相关
10.每种类型的流是一个EventEmitter实例,并抛出的时代不同的实例几个事件。例如,一些常用的事件是:
data - 当有数据可读取此事件。
end - 当没有更多的数据读取此事件被触发。
error - 当有任何错误或接收数据写入此事件。
finish - 当所有数据已刷新到底层系统触发此事件
网络io也是一种流
11.全局对象:
Node.js的全局对象是具有全局性的,它们可在所有的模块中应用,不用包含某个模块
例如console,process,setTimeout(cb, ms),setInterval(cb, ms)等
12.工具模块:
OS Module
提供基本的操作系统相关的实用功能
Path Module
提供工具,用于处理和转换文件的路径
Net Module
提供服务器和客户端的数据流。充当网络包装
DNS Module
提供做实际DNS查询的功能,以及使用底层操作系统的名称解析功能
Domain Module
提供一个方式来处理多个不同的I/O操作,作为一个组
13.EXPRESS框架:用于开发web服务,例如网站,类似php?但不是后台程序?
Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序。 它有助于基于Node Web应用程序的快速开发。下面是一些Express框架的核心功能:
允许设立中间件响应HTTP请求
定义了用于执行基于HTTP方法和URL不同动作的路由表
允许动态渲染基于参数传递给模板HTML页面
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World');
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
14.restful
REST表示代表性状态传输。REST是一种基于Web标准的架构,并使用HTTP协议。
var express = require('express');
var app = express();
var fs = require("fs");
app.get('/listUsers', function (req, res) {
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
console.log( data );
res.end( data );
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
node_module
index.js
package.json工程目录
npm与第三方库(递归依赖)
npm install node-echo -g
参数中的-g表示全局安装,因此node-echo会默认安装到以下位置,并且NPM会自动创建好Linux系统下需
要的软链文件或Windows系统下需要的.cmd文件。
2.回调函数与等待
Stream基于事件机制工作,代码中data事件会源源不断地被触发,不管doSomething函数是否处理得过来
var rs = fs.createReadStream(src);
rs.on('data', function (chunk) {//data事件
rs.pause();
doSomething(chunk, function () {
rs.resume();
});
});
rs.on('end', function () {
cleanUp();
});
3.文件拷贝程序与事件机制实践
var rs = fs.createReadStream(src);
var ws = fs.createWriteStream(dst);
rs.on('data', function (chunk) {if (ws.write(chunk) === false) {
rs.pause();
}
});
rs.on('end', function () {
ws.end();
});
ws.on('drain', function () {
rs.resume();
});
根据drain事件来判断什么时候只写数据流已经将缓存中的数据写入目标,可以传入下一个待写数据了
例如上边的大文件拷贝程序,NodeJS直接提供了.pipe方法来做这件事情,其内部实现方式与上边的代码类似
4.文件系统使用
文件属性读写。
其中常用的有fs.stat、fs.chmod、fs.chown等等。
文件内容读写。
其中常用的有fs.readFile、fs.readdir、fs.writeFile、fs.mkdir等等。
底层文件操作。
其中常用的有fs.open、fs.read、fs.write、fs.close等等。
NodeJS最精华的异步IO模型在fs模块里有着充分的体现,例如上边提到的这些API都通过回调函数传递结果。以fs.readFile为例:
fs.readFile(pathname, function (err, data) {
if (err) {
// Deal with error.
} else {
// Deal with data.
}
});
如上边代码所示,基本上所有fs模块API的回调参数都有两个。第一个参数在有错误发生时等于异常对象,第二个参数始终用于返回API方法执行结果。
此外,fs模块的所有异步API都有对应的同步版本,用于无法使用异步操作时,或者同步操作更方便时的情况。同步API除了方法名的末尾多了一个Sync之外,异常对象与执行结果的传递方式也有相应变化。同样以fs.readFileSync为例:
try {
var data = fs.readFileSync(pathname);
// Deal with data.
} catch (err) {
// Deal with error.
}
5.网络操作
请求:
var options = {
hostname: 'www.example.com',
port: 80,
path: '/upload',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
var request = http.request(options, function (response) {});
request.write('Hello World');//发送请求
request.end();
便捷的get api
http.get('http://www.baidu.com', function (response) {//必须包含http等详细地址
var body = [];
console.log(response.headers);
response.on('data', function (chunk) {
body.push(chunk);
});
response.on('end', function () {
body = Buffer.concat(body);
console.log(body.toString());
});
});
应答:
http.createServer(function (request, response) {
var body = [];
console.log(request.method);
console.log(request.headers);
request.on('data', function (chunk) {
body.push(chunk);
});
request.on('end', function () {//本函数须对端执行request.end();才会触发事件
body = Buffer.concat(body);
console.log('cws');
console.log(body.toString());
});
}).listen(80);
5.
处理HTTP请求时url模块使用率超高,因为该模块允许解析URL、生成URL,以及拼接URL
querystring模块用于实现URL参数字符串与参数对象的互相转换
zlib模块提供了数据压缩和解压的功能。当我们处理HTTP请求和响应时,可能需要用到这个模块
request和response对象除了用于读写头数据外,都可以当作数据流来操作
request.on('data', function (chunk) {
body.push(chunk);
});
6.异步回调编程
fn2('input', function (output2) {
fn1(output2, function (output1) {
// Do something.
});
});
fn2的返回值是output2?
request.on('data', function (chunk) {
body.push(chunk);
});
request.on('data')的返回值传给function
7.REPL:指在线的开发环境
8.事件循环与回调的区别?
9.事件发射器 事件循环相关
10.每种类型的流是一个EventEmitter实例,并抛出的时代不同的实例几个事件。例如,一些常用的事件是:
data - 当有数据可读取此事件。
end - 当没有更多的数据读取此事件被触发。
error - 当有任何错误或接收数据写入此事件。
finish - 当所有数据已刷新到底层系统触发此事件
网络io也是一种流
11.全局对象:
Node.js的全局对象是具有全局性的,它们可在所有的模块中应用,不用包含某个模块
例如console,process,setTimeout(cb, ms),setInterval(cb, ms)等
12.工具模块:
OS Module
提供基本的操作系统相关的实用功能
Path Module
提供工具,用于处理和转换文件的路径
Net Module
提供服务器和客户端的数据流。充当网络包装
DNS Module
提供做实际DNS查询的功能,以及使用底层操作系统的名称解析功能
Domain Module
提供一个方式来处理多个不同的I/O操作,作为一个组
13.EXPRESS框架:用于开发web服务,例如网站,类似php?但不是后台程序?
Express是一个最小的,灵活的Node.js Web应用程序框架,它提供了一套强大的功能来开发Web和移动应用程序。 它有助于基于Node Web应用程序的快速开发。下面是一些Express框架的核心功能:
允许设立中间件响应HTTP请求
定义了用于执行基于HTTP方法和URL不同动作的路由表
允许动态渲染基于参数传递给模板HTML页面
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World');
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
14.restful
REST表示代表性状态传输。REST是一种基于Web标准的架构,并使用HTTP协议。
var express = require('express');
var app = express();
var fs = require("fs");
app.get('/listUsers', function (req, res) {
fs.readFile( __dirname + "/" + "users.json", 'utf8', function (err, data) {
console.log( data );
res.end( data );
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})