前提
- tcp:传输层的三次握手
- http:应用层的访问资源协议
- URL:格式是—协议://主机域名或者ip地址:port/资源路径
nodejs请求数据包
- 请求行:请求方式POST、GET和http版本
- 请求头:主机域名,操作系统和浏览器内核信息,浏览器能处理的文本和语言以及编码,cookie,connection
- 空行:分割请求头和消息体
- 请求体:具体内容
nodejs相应数据包
- 状态行:http版本,状态码(200、302、404、500)
- 1xx:指示信息—表示请求已接受,继续处理。
- 2xx:成功—表示请求已被成功连接、理解、接受。
- 3xx:重定向—要完成请求,必须进行更进一步的操作。
- 4xx:客户端错误—请求由语法错误或者请求无法实现。
- 5xx:服务器端错误—服务器未能实现合法的请求。(服务器代码出错)
- 响应头:时间、服务器采用的版本比如apache,编码类型,超时时间设置等
- 空行: 分割这个响应头和消息体
- 消息体:相应的具体内容
nodejs是什么js
什么是js
- javascript,解释性语言,不需要经过编译,必须要通过浏览器来执行
浏览器怎么执行
- 通过浏览器的js引擎
- 火狐的js引擎叫spidermonky
- 谷歌的js引擎叫v8
- 苹果浏览器(Safari)的解析引擎叫做nitro
- 不同浏览器引擎不一样,但是都是ECMA标准。所以可以解析同一段js代码。
什么是node.js
- 因为js必须通过浏览器运行,有人就希望js代码可以脱离浏览器在外部的环境来运行,这个人(ryan dahl)就把谷歌的v8引擎给脱离出来了,因为v8是所有引擎中效率最高的,封装好v8后生成了一个运行平台,就是node.js
- 所以node.js是基于v8开发的一个js的运行平台,用于搭建相应速度快,易于扩展的网络应用
- 为什么说响应快
- Ryan Dahl这个人,早就封装好了一套库。我们直接基于它的库,就能开发我们对应的网络应用。
- Node.js使用事件驱动,非阻塞I/O模型。
- 开发出来的应用,轻量、高效,执行效率比较高。
node.js特点
- 异步IO:完成一件事情后才能做第二件叫做同步,烧开水的时候同时去扫地叫做异步的操作。
- 事件与回调:水烧开了之后,以事件的形式通知你,回来倒开水,就是在回调(处理烧完开水之后的结果)
- 单线程:如果不想自己异步,可以在同步的时候叫多几个小伙伴帮忙,叫做多线程(同一时间段多个人做事,但每个人只专注于同一件事),多线程要请人帮忙就要花钱犒劳一下他们,如果自己一个人做的话,就叫单线程
- 跨平台:Mac、Windows、Linux都可以运行node.js
node.js可以干嘛
- 开发web应用
- 开发命令式的代码语言
- 开发桌面应用:基于HTML和CSS来布置的,很灵活,扩平台,举例:有道词典。
- 已经有基于node.js的开源框架了:npm/bower/express
安装node.js
Mac下
安装xcode(命令:xcode-select --install)
安装Python
安装Homebrew(需要先安装ruby)
安装命令:
ruby –e “$(curl –fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)”
安装 node.js 命令:brew install node。
Linux
a) 安装node.js之前,如果没有安装g++以及libssl-dev,则先要安装好,安装方法如下:
$ sudo apt –get install g++
$sudo apt –get install libssl-dev
b) 获取压缩源码:
$ wget
https://nodejs.org/dist/v4.2.3/node-v4.2.3.tar.gz
c) 解压源码:$ tar zxvf nodejs-v4.2.3.tar.gz
d) 配置:$ ./configure
e) 编译:$make
f) 安装:$sudo make install
Windows
进入官网下载合适操作系统的.msi文件,然后按照默认安装。
安装后如果在黑框框里输入`node -v`没有反应的话,注意配置环境变量
node.js入门
万能的helloworld
1、新建一个js文件,编辑
function fun1(){
console.log("hello javascript");
//console这个模块,它里面的一个log方法,这个方法可以将我们这个传过去的这个字符串显示在控制台上面
}
fun1();//调用函数
2、打开黑框框进入这个文件所在文件夹,执行
3、完美,就这么简单
web形式执行js代码
1、新建一个js代码,命名为serverhello.js,编辑
//1、导入http模块,并用一个变量存储,后面会用来启动服务
var http = require("http");
//2、创建server实例,传递的参数是一个匿名函数,有两个参数req请求对象,resp响应对象
var server = http.createServer(function(req,resp){
//这个匿名函数的方法体里代表着我们要如何处理,只要有一定相应,就会调用这个函数
console.log("hello server,someone requseting");
//给浏览器返回数据,否则访问了127.0.0.1:2017的时候就会一直得不到响应
resp.write("hello browser");
resp.end();//这个方法才是真正把我们的数据发过去的,上面那个write只是写入response对象里去的
});
//3、启动服务并监听端口,两个参数
//端口号:可以自己设置,比如2017
//匿名函数,为了获取一个参数err(错误对象参数),没有报错的话err为空
server.listen("2017",function(err){
if(err != NULL){
console.log("start fail!");
}else{
//只要err为空,表示服务已经程控,就可以执行这句话打印一下
console.log("start success!at port 2017");
}
})
2、访问127.0.0.1:2017就会看到我们的黑框框控制台和网页都有显示,表示一个服务就搭好了!
3、如果需要停掉web服务的话,需要在黑框框里按ctrl+c连续两次
详细的原理参考http://www.maiziedu.com/wiki/nodejs/web/
node.js模块应用
把js模块化
- 一个模块就是一个js文件,里面的函数都是这个模块下的功能
- 引用模块的方法
var file = require("/file.js");
var db= require("/db.js");//引进来的模块,得到了一个对象
- 但是无法直接引用模块里的函数,必须要把模块里的函数先导出
/*file.js*/
function read(path){
console.log("假装已经完成了对"+path+"的文件读取");
}
export read = read;
/*也可以写成export readfile = read,有一点点类似于函数的声明*/
- 另外两种导出的方法,这两种方法后面的那个函数必须匿名
/*db.js*/
export.add = function(){
console.log("假装已经添加了数据");
}
module.export.del = function(){
console.log("假装已经删除了数据");
}
/*这两个引用,其实是同一个对象,这个exports.属性名 导出去的东西,最终都会综合到module.exports.属性名 这里面,一起导出去。*/
node.js包
可以发布,可以下载,注意对象的属性的赋值的巧用
node.js流
普通的读取文件太好内存,但是流可以解决这个问题,就像管道流水一样,读一段操作完再读再操作,不浪费内存地实现大文件的操作。
本文介绍了Node.js的基础知识,包括TCP、HTTP协议的理解,Node.js请求和响应数据包的结构,Node.js的起源和特点,如异步IO、事件驱动和单线程。详细讲解了如何安装Node.js,并通过实例演示了创建Hello World程序、建立Web服务器以及模块化应用。此外,还介绍了Node.js的流和包管理,帮助初学者快速入门。
1009

被折叠的 条评论
为什么被折叠?



