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的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 入门

Node.js

Node.js

一初始Node.js

一初始Node.js

一初始Node.js