为了账号安全,请及时绑定邮箱和手机立即绑定

进击Node.js基础(二)

Scott 全栈工程师
难度中级
时长 2小时 4分
学习人数
综合评分9.60
153人评价 查看评价
9.8 内容实用
9.4 简洁易懂
9.6 逻辑清晰
  • 一、buffer: tcp/图像/文件/网络

    1、poolSize: 内存载体的容量

    2、isBuffer

    3、compare:判断buffer对象的相对位置,字符串排序

    4、isEncoding:nodeJs是否支持某种编码

    5、concat:连接buffer对象

    6、byteLength:获得指定编码下字节长度。

    二、buffer源码,1000行左右

    1、process.binding使javascript代码和c++代码能够进行交互。

    2、smalloc:操作内存和分配内存的对象

    smalloc.alloc:生成内存的方法

    查看全部
  • 一、buffer和stream

    1、buffer

    (1)缓冲,nodeJs处理二进制的数据。js字符串数据‘utf-8’格式。

    (2)全局的,不需要require引入。是一个构造函数,有自己的属性和方法。

    (3)实例化Buffer

    ①new 一个实例化对象

    new Buffer('hello');

    ② 内存空间实例化

    var buf = new Buffer(8); // 8:内存空间的大小

    ③ 数组方式实例化的对象,可以直接用下标访问。通过下标取到的值是直接取整,如果原先是小数,取出来的就是整数了。

    var buf = new Buffer([1, 2, 3, 4]); 



    查看全部
  • 一、https协议是在http协议的基础上添加了SSL和TLS

    二、https模块主要是处理加密访问的。搭建https的时候需要ssl证书。

    三、并发控制,同时去爬。Promise.all();


    查看全部
  • 一、异步操作解决方案:

    回调

    事件机制

    对事件进行监听

    对某个异步操作增加事件的触发,包括订阅者、发布者等观察者模式

    promise

    二、Promise是一个对象,与其他javascript对象没有其他区别

    三、Promise对象的三种状态

    1、未完成 pending

    2、已完成 fufilled

    3、 失败 rejected

    四、jquery中的promise,then返回的不是新的promise,只是改变了promise的状态。

    五、promise then 方法:

    1、then方法必须是返回一个promise对象。

    2、then接收2个参数,这2个参数都可以省略。

    3、promise会保证then的回调顺序。



    查看全部
  • 一、webstorm列编辑,多行编辑快捷键:

    按住alt键鼠标选择要修改的字符串,然后输入文字就会编辑多行。

    二、动画一般一秒钟60帧,是比较流畅的帧率。

    三、安装bluebird,aSuncat:现在的nodejs不安装bluebird就能用promise(es6语法)。

    1、cd promise

    2、npm install bluebird


    查看全部
  • <!doctype><html>	<head>		<title>Promise animation</title>		<style type="text/css">			.ball {				width: 40px;				height: 40px;				border-radius: 20px;			}			.ball1 {				background: red;			}			.ball2 {				background: yellow;			}			.ball3 {				background: green;			}		</style>		<script type="text/javascript" src="./node_modules/bluebird/js/browser/bluebird.js"></script>	</head>	<body>		<div class="ball ball1" ></div>		<div class="ball ball2" ></div>		<div class="ball ball3" ></div>		<script type="text/javascript">			var ball1 = document.querySelector('.ball1')			var ball2 = document.querySelector('.ball2')			var ball3 = document.querySelector('.ball3')			function animate(ball, distance, cb) {				setTimeout(function() {					var marginLeft = parseInt(ball.style.marginLeft, 10)					if(marginLeft === distance){						cb && cb()					}else{						if(marginLeft < distance){							marginLeft++						}else{							marginLeft--						}						ball.style.marginLeft = marginLeft + 'px'						animate(ball, distance, cb)					}				}, 13)			}			/*animate(ball1, 100, function() {				animate(ball2, 200, function() {					animate(ball3, 300, function() {						animate(ball3, 150, function() {							animate(ball2, 150, function() {								animate(ball1, 150, function() {								})							})						})					})				})			})*/			var promise = window.Promise			function promiseAnimate(ball, distance) {				return new Promise(function(resolve, reject) {					function _animate() {						setTimeout(function() {							var marginLeft = parseInt(ball.style.marginLeft, 10)							if(marginLeft === distance){								resolve()							}else{								if(marginLeft < distance){									marginLeft++								}else{									marginLeft--								}								ball.style.marginLeft = marginLeft + 'px'								_animate()							}						}, 13)					}					_animate()				})			}			promiseAnimate(ball1, 100)				.then(function() {					return promiseAnimate(ball2, 200)				})				.then(function() {					return promiseAnimate(ball3, 300)				})				.then(function() {					return promiseAnimate(ball3, 150)				})				.then(function() {					return promiseAnimate(ball2, 150)				})				.then(function() {					return promiseAnimate(ball1, 150)				})		</script>	</body></html>


    查看全部
  • 用promise重构爬虫代码- new一个promise对象爬取每一节课程信息

    查看全部
  • 使用promise爬取多个页面
    查看全部
  • Https服务器
    查看全部
  • Pipe左边是可读流,右边是输出流

    查看全部
  • Node.js 中有四种基本的流类型:


    Readable - 可读的流 (例如 fs.createReadStream()).

    Writable - 可写的流 (例如 fs.createWriteStream()).

    Duplex - (双工流)可读写的流 (例如 net.Socket).

    Transform - (转换流)在读写过程中可以修改和变换数据的 Duplex 流 (例如 zlib.createDeflate()).


    查看全部
  • Buffer的实例方法还有:

    pollsize:大小;

    isBuffer:判断是否为buffer类型;

    compare:判断相对位置;

    isEncoding:是否支持某种编码;

    concat:连接创建为新的buffer对象;

    byteLength:获得指定编码下的字符串所占的字节数。


    查看全部
  • let http = require('https');

    let baseUrl = 'https://www.imooc.com/learn/';

    let learnNumber_baseUrl = 'https://www.imooc.com/course/AjaxCourseMembers?ids=';

    let cheerio = require('cheerio');

    let videosId = [728,637,348,259,197,134,75];


    function filerChapters(pageData){

        let html = pageData.html;

        let $ = cheerio.load(html);

        let chapters = $('.chapter');


        let courseData = {

            title:$('.hd h2').text(),

            number:pageData.number,

            id:$('.person-num').attr('href').split('/')[2],

            videos:[]

        };


        chapters.each(function(item){

            let chapter = $(this);

            let chapterTitle = chapter.find('h3').text();

            let videos = chapter.find('.video').children('li');

            let chapterData = {

                chapterTitle:chapterTitle,

                videos:[]

            };


            videos.each(function(item){

                let video = $(this).find('.J-media-item');

                let videoTitle = video.text().trim();

                let id = video.attr('href').split('video/')[1];

                let videoData = {

                    title:videoTitle,

                    id:id

                };


                chapterData.videos.push(videoData);

            });


            courseData.videos.push(chapterData);

        });


        return courseData;

    }


    function printCourseData(coursesData){

        coursesData.forEach(function(courseData){

            console.log('\n');

            console.log('     #########   '+courseData.title + '  [学习人数:' + courseData.number + ']   #########\n');

            courseData.videos.forEach(function(item){

                let chapterTitle = item.chapterTitle;

                console.log(chapterTitle );

                item.videos.forEach(function(video){

                    console.log(' [' + video.id+ ']' + video.title.trim().split('(')[0]);

                });

            });

        });

    }


    function getPageAsync(url){

        return new Promise(function(resolve, reject){

            http.get(url,function(res){

                let html = '';

                res.on('data',function(data){

                    html += data;

                });

                res.on('end',function(){

                    resolve(html);

                });

            }).on('error',function(){

                console.log('error');

            });

        });

    }


    function getLearnDataAsync(html){

        return new Promise(function(resolve,reject){

            let $ = cheerio.load(html);

            let id = $('.person-num').attr('href').split('/')[2];

            let pageData = {

                html:html,

                number:0

            };


            let db = '';

            http.get(learnNumber_baseUrl+id,function(res){

                res.on('data',function(data){

                    db += data;

                    db = JSON.parse(db);

                    pageData.number = parseInt(db.data[0].numbers,10);

                });


                res.on('end',function(){

                    resolve(pageData);

                });


            }).on('error',function(){

                console.log('error');

            });

        });

    }


    let promiseList = [];

    // let coursesDataPromises = [];


    videosId.forEach(function(id){

        promiseList.push(getPageAsync(baseUrl+id).then(function(html){

            return getLearnDataAsync(html);

        }));

    });


    Promise

        .all(promiseList)

        .then(function(pagesData){

            let coursesData = [];

            pagesData.forEach(function(pageData){

                coursesData.push(filerChapters(pageData));

            });


            printCourseData(coursesData);

        });


    查看全部
  • (一)Promise 1. ES6的Promise语言标准 2. Promise/A+规范 (二)Promise使用场景 1. 是一种异步的实践方案 2. 特别是Callback Hell, 可以用同步的方式写异步代码 (三) Promise的三种状态 1. pending  未完成 2. fulfilled 已完成 3. rejected 失败 (1->2, 1->3 正确) (2->1, 3->1, 2->3 错误) 总结: 只能又未完成变为已完成或失败, 且不可逆, 改变只能一次, 不存在即已完成同时失败

    查看全部
  • 说一下我的理解,Promise没有把异步变同步,只是以同步的方式来写异步,使用promise,当代码执行到resolve时跳到下一步的then方法中依次执行,执行到reject时跳到catch方法依次执行;上一步then方法中返回的值可以是一个新的Promise也可以是某一固定值,为新的Promise时会根据其resolve和reject来进行下一步的代码执行,当为固定值时会把该值传给下一步的then方法参数使用。
    Ajax解决的是网页异步刷新问题,完全可以在Promise中嵌套使用ajax。

    查看全部

举报

0/150
提交
取消
课程须知
本课程是一个系列课程,前导课程是《进击 Node.js 基础(一)》,所以建议小伙伴们学习本课程之前先把它拿下。
老师告诉你能学到什么?
1、了解 Promise 2、横扫 Nodejs API:Buffer、API-Stream

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!