node.js
Posted 向阳光大道勇猛前进吧,了解但不走偏门!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js相关的知识,希望对你有一定的参考价值。
1.create HTTP server
示例:
var http = require(‘http‘);
http.createServer(function(request, response) {
response.writeHead(200, {‘Content-Type‘: ‘text/plain‘});
response.end("Hello Smile!
");
}).listen()
说明:createServer函数返回一个对象,此对象有一个listen方法。listen有一个参数,代表端口号。
2.Node.js 模块
一个.js文件就是一个模块。
create module 创建模块:
smile.js 文件:
function smile() { //smile构造函数
var lotus,water;
this.lotus = function(myname) {name = myname};
this.water = function() {alert("name")};
}
module.exports = smile; 将smile对象封装到模块中,并将其公开接口。
main.js 文件
var smile = require(‘./smile‘); //获取smile构造函数
mtong = new smile(); //对象实例化
mtong.lotus(‘Amy‘);
mtong.water();
3.事件
a.EventEmitter :核心事件发射和事件监听器的封装。
此构造函数存在events模块里面。
方法:
on():
emit():
当事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作 为回调函数参数传递。
b.error事件
4.函数
5.路由
url模块:
示例:
a.url.parse(string).pathname
b.url.parse(string).query
路由注入服务器。
5.global
对象:
a.prodess
stout() //输出流
stdin() //输入流
nextTick(callback):把复杂的工作拆散,变成一个个较小的事件。 //
因为一个Node.js 进程只有一个线程,因此在任何时刻都只有一个事件在执行。
如果这个事 件占用大量的CPU 时间,执行事件循环中的下一个事件就需要等待很久,因此Node.js 的一
个编程原则就是尽量缩短每个事件的执行时间。
方法:argv()
b.consol
方法:log()
6.Buffer 存储二进制缓存文件。
create 对象:var buf = new Buffer()
语法:buf.write(string[,offset[,length]][,encoding]) 返回实际大小
a.
缓存区读取数据:
语法:
buf.toString([encoding[,start[,end]]]) 说明:解码缓冲区数据并使用指定编码返回字符串。
b.
buf.JSON()
c.缓冲区合并
Buffer.concat(list[, totalLength])
d.缓冲区比较
buf.compare(otherBuffer);
e.拷贝缓冲区
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
f.缓冲区的剪切
buf.slice([start[, end]])
7.Stream 流
常见2种流类型
1.read 读
2.write 写
常见事件:data end error finish
读取流:
var fs = require("fs");
var data = "";
var readerStream = fs.createReadStream(‘input.txt‘);
readerStream.setEncoding(‘UTF8‘);
readerStream.on(‘data‘,function(chunk){
data += chunk;
})
readerStream.on(‘end‘,function(){
console.log(data);
})
readerStream.on(‘error‘,function(err){
console.log(err.stack);
})
写入流:
var fs = require("fs");
var data = "Hello Smile!";
var writerStream = fs.createWriteStream(‘input.txt‘);
writerStream.write(data,‘utf8‘);
writerStream.end();
writerStream.on(‘finish‘, function(){
console.log("写入完成");
})
writeStream.on(‘error‘, function(err){
console.log(err.stack);
})
管道流:
var fs = require("fs");
var readerSteam = fs.createReadStream("input.txt"); //可读流
var writeStream = fs.createWriteStream("output.txt"); //可写流
readerStream.pipe(writeStream); //管道传输中
链式流:
作用:压缩,解压文件。
压缩:
var fs = require("fs");
var zlib = require("zlib");
fs.createReadStream("input.txt")
.pipe(zlib.createGzip());
解压:
var fs = require("fs");
var zlib = require("zlib");
fs.createReadStream("input.txt.gz")
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream("input.txt"));
.pipe(fs.createWriteStream("input.txt.gz"));
8.util
方法
a.inherits 原型继承对象
9.文件系统
同步:fs.readFile(filename,[encoding],[callback(err,data)])
fs.readFile(文件名,编码,回调函数)
异步:fs.readFileSync(filename,encoding) //需要try,catch捕捉错误。
方法:
a.fs.open()
b.fs.read()
10.工具模块
a.OS : 操作系统函数
b.Path: 文件路径
c.Net :网络通信,服务器和客户端操作
d.DNS :解析域名地址
e.Domain : 简化异步异常处理
11.web HTTP 模块
客户端:向服务器请求内容。
服务器:向客户端响应数据。
创建web服务器:
var http = require(‘http‘);
var fs = require(‘fs‘);
var url = require(‘url‘);
http.createServer(function(request, response) {
//解析请求,获取文件名
var pathname = url.parse(request.url).pathname;
//解析请求,获取文件
fs.readFile(pathname.substr(1),function(err, data) {
if(err) {
console.log(err);
}
else {
//响应文件
response,write(data.toString());
}
//发送响应数据
response.send();
});
}).listen(8080)
12.Express 框架
特点:
a.设置中间件响应HTTP请求
b.定义路由执行不同HTTP请求动作
c.通过模板传递参数动态渲染html页面。
导入express模块
var express = require("express");
var smile = smile();
请求和响应:
smile.get/post(‘/‘,function(rep,res){...})
Request 对象 - request对象表示HTTP请求,包含了请求查询字符串,参数,内容,HTTP头部等属性。常见属性有:
req.app:当callback为外部文件时,用req.app访问express的实例
req.baseUrl:获取路由当前安装的URL路径
req.body / req.cookies:获得「请求主体」/ Cookies
req.fresh / req.stale:判断请求是否还「新鲜」
req.hostname / req.ip:获取主机名和IP地址
req.originalUrl:获取原始请求URL
req.params:获取路由的parameters
req.path:获取请求路径
req.protocol:获取协议类型
req.query:获取URL的查询参数串
req.route:获取当前匹配的路由
req.subdomains:获取子域名
req.accpets():检查请求的Accept头的请求类型
req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages
req.get():获取指定的HTTP请求头
req.is():判断请求头Content-Type的MIME类型
Response 对象 - response对象表示HTTP响应,即在接收到请求时向客户端发送的HTTP响应数据。常见属性有:
res.app:同req.app一样
res.append():追加指定HTTP头
res.set()在res.append()后将重置之前设置的头
res.cookie(name,value [,option]):设置Cookie
opition: domain / expires / httpOnly / maxAge / path / secure / signed
res.clearCookie():清除Cookie
res.download():传送指定路径的文件
res.get():返回指定的HTTP头
res.json():传送JSON响应
res.jsonp():传送JSONP响应
res.location():只设置响应的Location HTTP头,不设置状态码或者close response
res.redirect():设置响应的Location HTTP头,并且设置状态码302
res.send():传送HTTP响应
res.sendFile(path [,options] [,fn]):传送指定路径的文件 -会自动根据文件extension设定Content-Type
res.set():设置HTTP头,传入object可以一次设置多个头
res.status():设置HTTP状态码
res.type():设置Content-Type的MIME类型
路由:
a.指定脚本去响应客户端请求。
b.路由提取HTTP请求的url和get/post参数。
方法:
1):get()
2):post()
3):文件上传
13.API
14.多线程
15.打包
以上是关于node.js的主要内容,如果未能解决你的问题,请参考以下文章