1.开始
源码下载:https://github.com/sayar/NodeMVA
在线视频:https://mva.microsoft.com/en-US/training-courses/using-node-js-with-visual-studio-code-13920
2.事件驱动编程语言Nodejs
阻塞与非阻塞(Blocking I/O and Non Blocking I/O)
Blocking I/O
|
1
2
3
4
|
var fs = require('fs');
var contents = fs.readFileSync('package.json').toString();
console.log(contents); |
Non Blocking I/O
|
1
2
3
4
5
|
var fs = require('fs');
fs.readFile('package.json', function (err, buf) {
console.log(buf.toString());
}); |
Nodejs与C#相反,readFileSync表示阻塞线程,而readFile不阻塞线程异步执行方法,调用完成后执行callback方法。
注:在c#中同步方法一般为object.action,同步方法会阻塞线程等待耗时操作执行完成,异步方法为object.actionAsyc,异步方法经常有个异步事件可以注册待异步方法执行结束后调用。
3.Hello World
打开源码文件夹01_HelloWorld,包含两个文件app.js和package.json
app.js
|
1
|
console.log('Hello world'); //在控制台中输出Hello World , 令人熟悉的console类
|
package.json
|
1
2
3
4
5
6
7
8
9
10
|
{ "name": "_01_HelloWorld",
"version": "0.0.0",
"description": "Hello World",
"main": "app.js",
"author": {
"name": "Rami Sayar",
"email": ""
}
} |
打开CMD执行命令node app可以看到执行结果Hello World。
|
1
2
3
|
$ cd 01_HelloWorld
$ node appHello World |
4.FileIO
打开源码文件夹03_FILEIO
app.js
|
1
2
3
4
5
6
7
8
9
10
|
var fs = require('fs');
//阻塞I/O toString 用起来很顺手,比学C#简单多了var contents = fs.readFileSync('package.json').toString();
console.log(contents);//非阻塞I/Ofs.readFile('package.json', function (err, buf) {
console.log(buf.toString());
}); |
5.Streams
打开源码文件夹06_Streams
app.js
|
1
2
3
4
5
6
|
var fs = require("fs");
// Read Filefs.createReadStream("package.json")
// Write File
.pipe(fs.createWriteStream("out-package.json"));
|
6.HelloWorldHttp
打开源码文件夹02_HelloWorldHttp
app.js
|
1
2
3
4
5
6
7
8
9
10
|
var http = require('http');
//处理http请求,返回200ok hello worldvar server = http.createServer(function (request, response) {
response.writeHead(200, { "Content-Type": "text/plain" });
response.end("Hello World\n");
});//侦听7000端口server.listen(7000); |
7.HelloWorldTCP
打开源码文件夹05_HelloWorldTCP
server.js
|
1
2
3
4
5
6
7
8
9
|
var net = require('net');
// The handler argument is automatically set as a listener for the 'connection' eventvar server = net.createServer(function (socket) {
console.log("Connection from " + socket.remoteAddress);
socket.end("Hello World\n");
});server.listen(7000, "127.0.0.1");
|
client.js
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
var net = require('net');
var client = new net.Socket();
client.connect(7000, "127.0.0.1");
client.on('data', function (data) {
console.log('Data: ' + data);
client.destroy();
});// Add a 'close' event handler for the client socketclient.on('close', function () {
console.log('Connection closed');
}); |
打开两个CMD窗口,这两个窗口将会互相通讯。
|
1
2
|
$ cd 05_HelloWorldTCP
$ node server |
|
1
2
|
$ cd 05_HelloWorldTCP
$ node client |
8.Requests
打开源码文件夹10_Requests
app.js
|
1
2
3
4
5
|
var request = require("request");
request("http://www.bing.com", function(error, response, body) {
console.log(body);
}); |
http://www.cnblogs.com/mengkzhaoyun/p/5355186.html