Node 基础知识点总结
2017年07月12日
数据库模块
1var mysql = require('mysql'); 2 3// 创建数据库连接 4var connection = mysql.createConnection({ 5 host: 'localhost', 6 user: 'root', 7 password: '0000', 8 database: 'phone_weixin', 9}); 10 11connection.connect(); 12 13// 操作数据库返回数据 14connection.query('select * from msg', function (error, results, fields) { 15 if (error) throw error; 16 console.log(results); 17}); 18 19connection.end();
fs 模块
1readFile(); 2readFileSync(); 3// 读取文件 4var text = fs.readFileSync('fileNmae.txt', 'utf8'); 5 6writeFile(); 7writeFileSync(); 8 9// 以添加模式写入字符 10fs.writeFileSync('fileName', 'content', { flag: 'a' });
HTTP
客户端请求时
当出现ENOTFOUND
错误时,可以的解决办法是设置:
1http.globalAgent.maxSockets = 10;
下面这段话可能有所解释:
默认情况下, Node.js 会使用
HTTP Agent
这个类来创建 HTTP 连接,这个类实现了 socket 连接池,每个主机+端口对的连接数默认上限是 5。同时HTTP Agent
类发起的请求中默认带上了Connection: Keep-Alive
,导致已返回的连接没有及时释放,后面发起的请求只能排队。解决办法有三种:
- 禁用
HTTP Agent
,即在在调用get
方法时额外添加参数agent: false
- 设置
http
对象的全局 socket 数量上限- 在请求返回的时候及时主动断开连接
来源:http://blog.csdn.net/bolg_hero/article/details/49427677
Child Process 模块
exec
方法用于执行 bash 命令,它的参数是一个命令字符串。
1var exec = require('chile_process').exec; 2 3var ls = exec('ls -l', function (error, stdout, stderr) { 4 if (error) { 5 console.log(error); 6 } 7 console.log(stdout); 8});
由于标准输出和标准错误都是流对象(stream),可以监听 data 事件,因此上面的代码也可以写成下面这样。
1var exec = require('child_process').exec; 2var child = exec('ls -l'); 3 4child.stdout.on('data', function (data) { 5 console.log('stdout: ' + data); 6}); 7child.stderr.on('data', function (data) { 8 console.log('stderr: ' + data); 9}); 10child.on('close', function (code) { 11 console.log('closing code: ' + code); 12});
异步编程
如果数组成员可以并行处理,但后续代码仍然需要所有数组成员处理完毕后才能执行的话,则异步代码会调整成以下形式:
1(function (i, len, count, callback) { 2 for (; i < len; ++i) { 3 (function (i) { 4 async(arr[i], function (value) { 5 arr[i] = value; 6 if (++count === len) { 7 callback(); 8 } 9 }); 10 })(i); 11 } 12})(0, arr.length, 0, function () { 13 // All array items have processed. 14});
以上代码并行处理所有数组成员,并通过计数器变量来判断什么时候所有数组成员都处理完毕了。
HTTP 协议
请求报文
规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:
<method> <request-URL> <version>
<headers>
<entity-body>
响应报文
HTTP 响应与 HTTP 请求相似,HTTP 响应也由 3 个部分构成,分别是:
- 状态行
- 响应头(Response Header)
- 响应正文
状态行由协议版本、数字形式的状态代码、及相应的状态描述,各元素之间以空格分隔。
URL
HTTP URL (URL 是一种特殊类型的 URI,包含了用于查找某个资源的足够的信息)的格式如下:
http://host[":"port][abs_path]
- http 表示要通过 HTTP 协议来定位网络资源
- host 表示合法的 Internet 主机域名或者 IP 地址
- port 指定一个端口号,为空则使用缺省端口 80
- abs_path 指定请求资源的 URI
如果 URL 中没有给出 abs_path,那么当它作为请求 URI 时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
在浏览器中输入 URL 后的流程
- 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的 HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器
- 释放 TCP 连接
- 浏览器得到 html 文本并显示内容
参考
7 天学会 Node.js:http://nqdeng.github.io/7-days-nodejs/