【node.js】(1)-基础使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w8897282/article/details/72897556

本笔记主要摘录自慕课网课程进击Node.js基础(一)

node.js

node.js 虽然带有js后缀,但实际上是采用chorme浏览的V8引擎,由C++语言编写的,本质上是javaScript的运行环境

node.js可以解析js代码,而且没浏览器安全级的限制,并且可以提供系统级别的API,如I/O,网络通信等。

借助于node.js可以完成的事情:
(1)node-webkit/appjs 允许开发者使用web技术,开发跨平台的桌面应用程序,兼容mac,Linux,windows。
(2)jade与node组合使用,可以高效地管理后台html模板
(3)ghost 开源博客程序
(4)grunt 跑js各种任务的工具,通过集成各种插件,来完成样式编译,语法检查,脚本压缩合并,自动化测试,shell脚本运行,文档甚至是图片的处理等任务,而这些插件本身也是nodejs的模块,而Yamr,就是为了方便Grunt的快速配置而存在的另外一个框架。
(5)express.js 构建网站
(6)nodecast,首先在Pc上运行,然后启动移动设备,选择一个支持chormCast的程序,然后就可以把移动广播的内容映射到电脑上,等于把电脑当做流媒体使用。
(7)Log.io 让开发者可以在浏览器里实时监控项目日志

值得常去的网站:官网,npm,github,stackoverflow.com

node下载

去(官网)[https://nodejs.org/en/]下载win的相关(主要是操作系统的位数)版本,全程next到底。然后按ctr+r输入cmd,输入node -v 查看当前node的版本,如果显示出了版本号则说明安装成功。这里的环境变量应该是在安装node时就自动配置好了。

当然了,如果自动配置失败,也可以手动添加node.js的环境变量。

第一个服务器

我们首先在桌面上创建一个node的文件夹,然后创建一个js文件,命名为web-service,在里面输入如下代码,这里查看官网的实例代码:

//加载http的模块,创建http,处理相关任务
var http=require('http');
//创建web服务器,传入请求和响应
var serv=http.createServer(function (req,res){
    res.writeHead(200,{'content-Type':'text/html'});
    res.end('<p>hello world!</p>');
});
//在3000端口监听请求
serv.listen(3000);

然后cd到node文件下,输入

node web-service.js

这里写图片描述

然后在浏览器输入地址:
这里写图片描述

可以看到我们的服务器已经启动。

模块与包管理工具

我们可以用过var或者function可以定义一个全局访问的变量或者函数,但是当多人协作的时候或者大量的js文件的时候,批量引入到某个页面时,就可能出现变量覆盖或者重写的情况,特别是当js模块之间存在着依赖关系的时候,非常容易导致页面出错。

这主要是因为js天生就缺少一套模块管理机制来隔离实现不同功能的js片段避免他们相互污染。为此,我们通常采用命名控件的方法,把函数和变量限制在某个特定的作用域内,强制约定一套命名规范来约束代码,从而保证代码的安全执行。
这里写图片描述

common.js是一套规范,它约定了JavaScript该如何去组织,如何去编写。首先是把执行不同任务的特定的代码快或者代码文件看做是一个独立的模块,每一个模块可以看做是一个独立的作用域,但并不是孤立的,可能存在着依赖关系。每一个模块都可以具体到三个关键部分,分别是模块的定义、标识和引用。common.js的设计规范在社区内不断的成长壮大,对许多开源的产品产生了积极的作用。
这里写图片描述
node.js借鉴了common.js的模块组织理念,并基于common.js的规范实现了一套模块管理系统。在node.js中,每一个js文件都可以看做是一个独立的模块,在模块里面不需要有命名空间,也不需要担心有变量污染和方法定义时的覆盖。我们在安装node.js的时候同时会安装nmp这个包管理工具,通过这个工具,我们可以往项目中添加形形色色的js模块。npm的作用类似于maven和gradle。

在node.js中文件和模块是一一对应的。模块有几种不同类型,可以划分为核心模块、文件模块和通过nmp安装的第三方模块。

API简介

URL解析

url.parase();

QueryString参数处理

在前端开发和后端开发中,我们有时需要传递不同的参数追加到URL地址当中发送给服务器,而服务器其实拿到的是一个带有参数的字符串。

此时的服务器是不知道参数的个数和参数值的,这里就需要一个途径把参数从字符串中一个个取出放到对象当中。
这里写图片描述

HTTP知识

Http工作的基本流程

(1)http客户端发起请求,创建端口;
(2)http服务器在端口监听客户端 请求;
(3)http服务器向客户端返回状态和内容;

当我们在浏览器中输入一个网址时,浏览器和服务器之间发生了如下的事情:

(1)域名解析。浏览器首先搜索自身的DNS缓存,查看自身缓存中是否有域名对应的ip地址,缓存的时间大概是1min。以chrome浏览为例子,我们在

chrome当中输入chrome://net-internals/#dns

就能查看当前chrome缓存的dns

(2)如果浏览器没有缓存或者缓存已经失效,那么操作系统会搜索操作系统自身的一个dns缓存。
(3)读取本地的host文件;
(4)浏览器发起一个dns的系统调用,向本地址库dns服务器,一般是宽带域名商,发起一个域名解析请求。在这一步中以imooc.com为例子,运营商服务器又将经过如下的几个步骤:

  1. 宽带运行商查看本身的缓存
  2. 运营服务商代替浏览器发起一个迭代的dns解析请求。也就是说运营商会向根域发送一个域名解析请求,根域发现这是一个com的顶级域域名,就会告诉运营商com域域名的地址。
  3. 运营商接着向com域的dns服务器询问域名的ip地址,com域服务器会告诉运营商imooc.com所在域的地址,这个地址一般是域名注册商的服务器地址,例如万网、新网之类。这时注册商服务器就会查找自身的dns列表,将域名的ip地址返回给运营商服务器。
  4. 运营商拿到域名的ip地址,把结果返回给操作系统内核缓存起来;
  5. 操作系统内核把结果返回给浏览器;

(5)浏览器最终拿到ip地址,发起经典的Http“三次握手”,此时浏览器以一个随机端口向服务器的web程序,例如80端口连接请求。这个连接请求通过层层的路由设备到达服务器端后进入到网卡,然后进入到内核的TCP/IP协议栈,当然还可能经过防火墙的过滤,最终到达web服务端,紧接着就建立了TCP和IP的连接;
(6)TCP/IP连接建立起来之后,浏览器就可以向服务器发送Http请求了;
(7)服务器端接受到请求,根据路径参数,经过后端一些处理之后,把处理后的一个结果数据返回给浏览器,如果是页面的话,那就是返回完整的HTML代码。
(8)浏览器拿到了网站完整的HTML页面代码后,通过渲染引擎解析和渲染JS、CSS、图片静态资源等等,这个过程实际上也是一个个的Http请求,它们都需要经过上面的主要七个步骤。
(9)浏览器根据拿到的资源对页面进行渲染,最终把一个完整的页面呈现在用户的面前。

这里的Http请求知识一个大概的梳理,更多详细的细节需要再去查阅专门的书籍和文章,这里推荐一本讲解Http的书籍:
图解http-下载地址

http组成部分

我们可以简单地把http协议拆分成【请求】和【响应】。

无论是请求还是响应都会发送http头和正文的信息。
这里写图片描述

Http状态码

  • 1XX
    请求已经接受,正在处理。
  • 2XX
    请求成功,并已经处理。例如:
    200-请求成功
  • 3XX
    表示请求重定向,需要进一步的操作
  • 4XX
    客户端错误,请求时存在语法错误,或者请求无法实现,例如:
    400-客户端请求语法错误;
    401-请求没有经过授权;
    403-服务端拒绝服务,可能是没有权限;
    404-服务页面没有找到
  • 5XX
    服务器端错误,服务端可能无法实现合法的请求,例如:
    500-服务器端发生不可预知错误
    503-服务端当前还不能处理请求

猜你喜欢

转载自blog.csdn.net/w8897282/article/details/72897556
今日推荐