Fifth Week:Node.js学习

一 概述

简单来说就是运行在服务器端的JavaScript,事件驱动I/O,基于Google的V8引擎。
(1)非阻塞式IO 、IO多路复用
阻塞式IO是指建立了socket后,未得到响应之前什么也不能做。非阻塞式是指为了得到某些数据,可以通过定时询问的方式获取。
IO多路复用是指fork子进程或者创建线程来等待数据。
(2)libuv
事件轮训机制:每个句柄中存储数据和回调函数之类的信息,句柄在使用前添加到对应的队列或者堆(只有定时器句柄使用最小堆)中。libuv在进行每一次事件轮询的时候都会从每个类型的句柄中,取出关联的队列或者堆结构进行处理

nodejs最擅长处理高并发,
在java、php、.net等服务端语音中,会为每一个客户端连接创建一个新的线程,每一个线程占大约2MB的内存。也就是说,理论上一个8GB的服务器最多可以连接4000个左右的用户。如果想要让Web应用程序支持连接更多的用户,就要增加服务器的数量。
nodejs不为每一个客户连接创建一个新的线程,而仅仅使用一个线程。当有客户连接了,就触发一个内部事件,通过非阻塞式IO、事件驱动机制,让nodejs程序宏观上也是并行的,因此一个8GB的服务器,可以同时处理超过4万用户的连接

搭建环境
1、下载nodejs 最好是稳定版本LTS
Node -v 验证是否安装成功
2、开发工具vscode
使用pycharm
安装nodejs插件即可
一、http模块、url模块和supervisor模块
使用nodejs时,不仅仅实现了一个应用,同时实现了整个http服务器
//引入http模块
Var http=require(‘http’);

/*
创建一个http服务器
request表示获取url传过来的信息
response给浏览器响应信息
*/
http.createServer(function(request,response){
//设置响应头
response.writeHead(200,{‘Content-Type’:‘text/plain’});
//给页面上面输出一句话并且结束响应
response.end(‘HelloWorld112’);
}).listen(8081);//监听端口

console.log(‘Serverrunningathttp://127.0.0.1:8081/’);

URL模块的使用
Url.parse() 解析url
Url.format(urlObject) 上面parse操作的逆向操作
Url.resolve(from,to) 添加或者替换地址

supervisor自启动工具
设置环境变量
安装supervisor npm install -g supervisor
使用supervisor替代node启动应用

二、模块commonjs

commonJS就是模块化的标准,nodejs就是commonJS的实现
node中模块分成两部分
1、核心模块,由node提供(系统模块)如http模块,url模块、fs模块,这部分核心模块在程序启动时直接被加载到内存中
2、文件模块,用户编写的模块(自定义模块),在运行中动态加载,需要完整的路径分析、文件定位、编译执行过程,这些模块需要我们自行定义

2.2 自定义模块
(1)公共的功能抽离成一个单独的js文件作为一个模块,模块里功能默认外面无法访问,需要在模块里设置exports或者module.exports暴露属性或者方法
(2)外部通过require的方法引入这个模块

Npm init 生成package.json
Npm init --yes

三、fs模块、Mkdirp 第三方库的使用

1. Fs.stat  判断是文件还是目录
2. Fs.mkdir 创建目录
3. Fs.writeFile  若文件不存在,创建写入数据;若文件存在,覆盖内容
4. Fs.appendFile
5. Fs.readFile
6. Fs.readdir
7. Fs.rename
8. Fs.rmdir
9. Fs.unlink

四、数据类型

1、常量 使用大写字母和变量声明
Var SECONDS_PER_DAY = 86400;

2、Number 所有数字都是64位双精度浮点数
注意:除0时不产生异常,返回Infinity或-Infinity
测试是否有效的有限数使用isFinite函数 eg:console.log(isFinite(10/5));
3、 true/false
False:false,0,"",NaN,undefined都将计算为false,其他为true
布尔运算:&& || !

4、字符串
length属性 – 获取字符串长度
拼接 +
其他函数:indexOf、substr(获取子串的起始索引)、splice(根据起始索引获取子串)、split

特殊:
1、undefined 意味着值尚未设置或者根本不存在
2、null 空值

检查类型使用typeof
类型比较和转换
等于运算符==(值相等)
精确等于===(类型和值都要相等)
强制转换:parseInt 、parseFloat
若提供无法转换的值,返回NaN 【如果需要测试NaN,使用isNaN函数

二、Buildin对象
1、对象
创建一个对象 var o1 = new Object();
或 var o2 = {};
初始化:可以在初始化时指定成员名和值
Var user = {
name : “张三”,
age : 23
};
修改:
User.name = “李四”;
User[‘name’] = “王五”;
删除属性
Delete user.name

扩展
User.myValue = 123;//extend myValue
也可以嵌套
User.family = {mom:“coco”,dad:“kevin”};
User.grade = [99,98,97];

2、JSON
数据交换格式
JSON.parse 和 JSON.stringify
接收一个json字符串转换成一个对象
接收一个对象转换成json字符串表示形式
Var obj = {
“first_name”:“HTML”,
last_name :“CSS”
}

Var obj = {
“first_name”:“HTML”,
“last_name”:“CSS”
}

五、async await的使用和async await处理异步

ES7的新语法,需要结合ES6中promise写
1、ES6中常见语法
(1)let const
(2)箭头函数
(3)对象、属性的简写
(4)模板字符串
(5)Promise

2、简单理解async和await
async是让方法编程异步
await是等待方法执行完成

3、以流的方式读写文件
Fs.createReadStream
Fs.createWriteStream
pipe管道:创建一个可读流、一个写入流 读取后直接写入

web服务器:指网站服务器,如Apache、Nignx、ITS等
可以让我们访问web服务器上的网站,也可以下载上面的文件

1、封装静态web服务
2、路由:由一个uri(路径)和一个特定的http方法组成的,涉及到如何响应客户端对某个网站节点的访问。
通俗的说,针对不同请求的url,处理不同的业务逻辑。

六、EJS模块引擎

EJS是后台模板,可以把数据库和文件读取的数据显示到Html页面上
安装 npm install ejs --sava
ejs.renderFile(filename, data, options, function(err, str){
// str => Rendered HTML string
})

绑定数据
在这里插入图片描述

七、get、post方法

get:从指定的资源请求数据
post:向指定的资源提交要被处理的数据
获取get传值
Var urlInfo = url.parse(req.url,true);
urlInfo.query;
获取post传值
Var postData = “”;

//数据块接收中
Req.on('data',function(postDataChunk){
	postData+=postDataChunk;
})

Req.on('end',function(){
	Console.log(postData);
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值