nodejs初步学习笔记
来源:互联网 发布:js dom 大小改变事件 编辑:程序博客网 时间:2024/06/05 19:14
//加载了一个http模块,由js编写var http = require('http');//createServer来创建一个服务器http.createServer(function(req,res){//function用来告诉服务器请求回来应该做什么 res.writeHead(200, {'ContentType':'text/plain'}); res.end('HelloWorld\n');//listen在某端口监听请求}).listen(1337, '127.0.0.1');console.log('Server running at http://127.0.0.1:1337/');
一个服务器就这样建好了,在浏览器输入127.0.0.1:1337就可以看到helloworld了
函数中的两个参数(req,res)req是请求体,res是响应体
nodejs基于Commonjs1.0规范,实现包管理系统,每一个文件是一个独立的模块,里面不需要命名空间,不用担心变量污染
模块分类:
1、核心模块
2、文件模块
3、第三方模块
模块流程:
1、创建模块
2、导出模块
3、加载模块
4、使用模块
暴漏模块使用exports.或module.exports
API
URI:统一资源标识符
URL:统一资源定位符 (是URI的子集,url一定是uri,uri不一定是url)
在控制台输入node进入node模式
输入url.format( )
url.parse( )
url.resolve( )
QueryString用来处理url的参数
Http
http就是一种协议,计算机之间都遵守这种协议才能互相沟通通信,有http客户端发送请求,建立tcp连接,服务器等待请求,返回内容,大概的流程就是这样。
当我们输入网址回车时
1、浏览器搜索自身的DNS缓存
2、搜素系统自身的DNS缓存(浏览器没有找到缓存或缓存已失效)
chrom://net-internais/#dns可以查看浏览器的浏览记录
3、读取本地的host文件
4、浏览器发起一个dns的一个系统调用
发送到运营商服务器
1、宽带运营商查看自身缓存
2、运营商服务器发起一个迭代dns解析的请求
运营商服务器把结果返回系统内核同时缓存起来
操作系统内核把结果返回浏览器
浏览器拿到最终ip地址
之后进行三次握手四次挥手建立tcp连接
tcp/ip协议建立起来之后就可以向服务器发送http请求了
服务器端处理后返回数据
浏览器拿到数据,进行解析
单线程:每次只谈一个女友,这个不分手下一个不能谈
多线程:同时谈多个女朋友
I/O:磁盘的写入和堵出,数据的进和出
阻塞和非阻塞:
阻塞:打电话预约位置,老板说去看看,你不挂断电话,一直等待
非阻塞:老板说去看看,你说等你找到再给我回电话,然后挂断电话去做别的事情
ab -n1000 -c10 http://。。。 可以测试http响应的时间状态
http网络小爬虫
//加载一个http模块var http = require('http')//要爬的网站网址(需要是http协议,https协议不可以)var url = 'http://www.hrbust.edu.cn/'//http发送get请求http.get(url, function(res) { var html = ''//data请求回来触发事件 res.on('data', function(data) { html += data })//请求结束触发的事件 res.on('end', function() { console.log(html) })}).on('error', function() {//请求出错的函数 console.log('出错')})
这样就是一个最基础的http网络爬虫
这样我们在终端打出 node 文件名.js 执行一下就会在终端显示所有的页面html代码
我们想要对html代码进行处理、过滤,得到我们想要的信息,选择性观看下方代码
var http = require('http')//使用npm install cheerio(相当于jq)var cheerio = require('cheerio')var url = 'http://www.imooc.com/learn/348'//获取函数function filterChapters (html) { var $ = cheerio.load(html) var chapters = $('.chapter') var courseData = [] chapters.each(function (item) { var chapter = $(this) var chapterTitle = chapter.find('strong').text() var videos = chapter.find('.video').children('li') var chapterData = { chapterTitle: chapterTitle, videos: [] } videos.each(function(item) { var video = $(this).find('.J-media-item') var videoTitle = video.text() var id = video.attr('href') chapterData.videos.push({ title: videoTitle, id: id }) }) courseData.push(chapterData) }) return courseData} //打印函数function printCourseInfo(courseData) { courseData.forEach(function(item) { var chapterTitle = item.chapterTitle console.log(chapterTitle + '\n') item.videos.forEach(function(video){ console.log('['+ video.id + ']' + video.title + '\n') }) });}http.get(url, function(res) { var html = '' res.on('data', function(data) { html += data }) res.on('end', function() { var courseData = filterChapters(html) printCourseInfo(courseData) })}).on('error', function() { console.log('出错')})
在终端可以看到我们想要的信息
http事件模块
http的主要事件模块就是events
先来一个简单的事件
//引入events事件模块var EventEmitter = require('events').EventEmitter//创建实例var life = new EventEmitter//on与addEventListener一样//添加事件life.on('点击', function(dosome) { console.log('给我' + dosome)})//触发事件life.emit('点击', '跪下!!!')
在终端运行后出现 《 给我跪下!!!》
官方建议对于一个事件不要设置超过十个监听器
当我们向下面这样做,代码也会执行,但是会抛出一个警告⚠️
//引入events事件模块var EventEmitter = require('events').EventEmitter//创建实例var life = new EventEmitter//on与addEventListener一样//添加事件life.on('点击', function(dosome) { console.log('给我' + dosome)})life.on('点击', function(dosome) { console.log('给大爷' + dosome)})life.on('点击', function(dosome) { console.log('给二大爷' + dosome)})life.on('点击', function(dosome) { console.log('给三大爷' + dosome)})life.on('点击', function(dosome) { console.log('给四大爷' + dosome)})life.on('点击', function(dosome) { console.log('给五大爷' + dosome)})life.on('点击', function(dosome) { console.log('给六大爷' + dosome)})life.on('点击', function(dosome) { console.log('给七大爷' + dosome)})life.on('点击', function(dosome) { console.log('给八大爷' + dosome)})life.on('点击', function(dosome) { console.log('给九大爷' + dosome)})life.on('点击', function(dosome) { console.log('给十大爷' + dosome)})life.on('点击', function(dosome) { console.log('给老姑' + dosome)})//触发事件life.emit('点击', '跪下!!!')
life.setMaxListener(最大添加事件数量)
life.emit( )返回一个布尔值,如果事件被监听过返回true,没有返回false
移除事件监听,removeListener
但是匿名函数不可以,我们需要这样写
function guixia(dosome){ console.log('给我' + dosome)}life.on('点击', guixia)life.removeListener(guixia)life.emit('点击', '跪下!!!')
这样就在执行之前移除了事件监听
查询这个事件执行了几次
console.log(life.listeners('事件名').length
移除全部事件监听
life.removeAllListener('事件名')
- nodejs初步学习笔记
- nodejs初步学习遇到错误
- nodejs 初步学习 安装和环境配置
- nodeJS之Express框架初步学习
- nodejs初步
- nodejs 学习笔记--debug
- NodeJS学习笔记
- nodejs学习笔记
- nodeJs学习笔记
- nodejs学习笔记
- NodeJS 学习笔记1
- 学习nodejs笔记一
- 学习nodejs笔记二
- Nodejs Monog 学习笔记
- nodejs学习笔记一
- NodeJS学习笔记
- nodejs学习笔记
- nodejs学习笔记1
- 如何将网站部署到阿里云服务器
- 如何禁止 iPhone Safari 视频自动全屏?
- AngularJs v1.6.6,使用window.print()打印报表实现
- Text Summarization 综述
- 一些C基础的小编程题目
- nodejs初步学习笔记
- sqlserver常用查询语句
- 自定义控件之水波纹效果
- [uboot] (番外篇)uboot 驱动模型
- 【常用函数封装】PHP没有pid的目录树
- Microsoft.Office.Interop.Word通过模板生成文档
- Echarts实现省份下点击跳转到指定链接
- 面试整理
- 项目中存在的问题