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

进击Node.js基础(一)

Scott 全栈工程师
难度中级
时长 3小时27分
学习人数
综合评分9.50
664人评价 查看评价
9.8 内容实用
9.4 简洁易懂
9.3 逻辑清晰
  • // 发送request请求


    // 格式: http.request(Options,function(){})

    var http = require('http');

    var querystring = require('querystring');


    // 评论的内容

    var postData = querystring.stringify({

    'content':'使用request测试评论',

    'cid':348,

    })


    // 定义options,信息来自于general

    // general

    // Request URL: https://www.imooc.com/course/docomment

    // Request Method: POST

    // Status Code: 200 OK

    // Remote Address: 115.182.41.180:443

    // Referrer Policy: no-referrer-when-downgrade


    // 注意:

    // 在options中content-length的值中,

    // 需要自己手动写入postData.length,用来做校验

    // 如:'Content-Length':postData.length,

    var Options = {

    hostname:'www.imooc.com',

    port:443,

    parse:'/course/docomment',

    method:'POST',

    headers:{

    'Accept':' application/json, text/javascript, */*; q=0.01',

    'Accept-Encoding':' gzip, deflate, br',

    'Accept-Language':' zh-CN,zh;q=0.9',

    'Connection':' keep-alive',

    'Content-Length':postData.length,

    'Content-Type':' application/x-www-form-urlencoded; charset=UTF-8',

    'Cookie':' IMCDNS=0; zg_did=%7B%22did%22%3A%20%2216762441a7a815-016a46bcd15174-35617600-13c680-16762441a7b794%22%7D; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1543541890; imooc_uuid=2545b8d9-ed90-44c6-8221-cccfc484afb3; imooc_isnew=1; imooc_isnew_ct=1543541889; loginstate=1; apsid=BiZThjNmY2NTg5NTE3NWZlNTAzNDg0NTg1ZTI5ZGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzM1NDM0MwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhhZTNlNmRhZDk0NjcwMDk4NGVmYWI3YWQ5MjVjMzExs5QAXLOUAFw%3DZj; PHPSESSID=co22od5t3ndqljcu0fkv2ktpe6; zg_f375fe2f71e542a4b890d9a620f9fb32=%7B%22sid%22%3A%201543548907984%2C%22updated%22%3A%201543548949222%2C%22info%22%3A%201543541889669%2C%22superProperty%22%3A%20%22%7B%5C%22%E5%BA%94%E7%94%A8%E5%90%8D%E7%A7%B0%5C%22%3A%20%5C%22%E6%85%95%E8%AF%BE%E7%BD%91%E6%95%B0%E6%8D%AE%E7%BB%9F%E8%AE%A1%5C%22%2C%5C%22%E5%B9%B3%E5%8F%B0%5C%22%3A%20%5C%22web%5C%22%7D%22%2C%22platform%22%3A%20%22%7B%7D%22%2C%22utm%22%3A%20%22%7B%7D%22%2C%22referrerDomain%22%3A%20%22www.imooc.com%22%2C%22cuid%22%3A%20%22lJ-kybg3YwI%2C%22%7D; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1543548949; cvde=5c009481cde1f-13',

    'Host': 'www.imooc.com',

    'Origin': 'https://www.imooc.com',

    'Referer': 'https://www.imooc.com/video/8837',

    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',

    'X-Requested-With': 'XMLHttpRequest'

    }

    }


    // 正式发送请求

    var req = http.request(Options,function(res){

    console.log('status: ' + res.statusCode);

    console.log(res);

    console.log('headers' + JSON.stringify(res.headers));

    // chunk是请求之后返回的数据,为buffer类型

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

    console.log(Buffer.isBuffer(chunk));

    console.log(typeof chunk );

    })

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

    console.log('评论完毕');

    })

    })

    // 请求异常时触发req.on('error' ,function)

    req.on('end',function(e){

    console.log('error' + e.message);

    })


    // 把数据写入到请求体

    req.write(postData)


    // 最后,手动调用req.end()来结束请求

    req.end()


    查看全部
  • 模块的分类:核心模块、文件模块、第三方模块

    查看全部
    0 采集 收起 来源:模块的分类

    2018-11-29

  • 2018.10.5最新可用代码

    var http = require('http')

    var cheerio = require('cheerio')

    var url = 'http://www.imooc.com/learn/637'


    function filterChapters(html) {

    var $ = cheerio.load(html)

    var chapters = $('.chapter')


    var courseData = []

    function trim(str) {

    return str.replace(/[\r\n ]/g, "")  //去除字符算中的空格

    }

    chapters.each(function (index, item) {

    var chapter = $(item)

    var chapterTitle = chapter.find('h3').text().trim()

    var videos = chapter.find('.video').children('li')

    var chapterData = {

    chapterTitle: chapterTitle,

    videos: []

    }


    // console.log(chapterTitle);

    videos.each(function (index, item) {

    var video = $(item).find('.J-media-item')

    var videoTitle = video.text()

    videoTitle = trim(videoTitle)

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

    // console.log(videoTitle);

    chapterData.videos.push({

    videoTitle: 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.videoTitle + '\n')

    })

    })

    }



    http.get(url, function (res) {

    var html = ''


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

    html += data

    })


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

    // console.log(html)

    var courseData = filterChapters(html)

    printCourseInfo(courseData);

    })

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

    console.log('获取课程信息出错!')

    })


    查看全部
    0 采集 收起 来源:HTTP 小爬虫

    2018-11-25

  • 一、测试http性能,appache自带的ab.

    1ab -n1000 -c10 http://localhost:2015/

    (1)-n:总请求数,  

    -c:并发数,Concurrency[kən'kʌrənsi](并发性)。

    -t:测试进行的总时间,-p:post数据文件,-w:以html表格形式输出文件。

    (2)2015后要加/

    二、重要指标

    1、Requests per second:服务器吞吐率。

    2、Time per request:用户平均请求的等待时间。

    3、第2个Time per request:每个连接请求时间实际运行时间的平均值。


    查看全部
    0 采集 收起 来源:HTTP 性能测试

    2018-11-25

  • GitHub浏览器快捷键T,进行搜索文件

    快捷键Ctrl+F,搜索代码


    查看全部
    0 采集 收起 来源:HTTP 源码解读

    2018-11-25

  • 作用域:与调用函数,访问变量的能力有关 作用域分为:局部和全局(在局部作用域里可以访问到全局作用域的变量,但在局部作用域外面就访问不到局部作用里面所设定的变量) 

     上下文:与this关键字有关 是调用当前可执行代码的引用       this总是指向调用这个的方法的对象 js里的this 通常是当前函数的拥有者,拥有者叫做执行上下文。在nodejs中声明函数中的this指向全局global,js中指向window。实例化函数后,指向当前函数的拥有者。

    call和apply可以改变上下文执行对象。(把原来的this全都替换成自己指定的对象即可理解。)


    查看全部
  • 1. 什么是回调? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。   异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。   3. 什么是I/O? 磁盘的写入(in)磁盘的读取(out) 4. 什么的单线程/多线程? 一次只能执行一个程序叫做单线程 一次能执行多个程序叫多线程 5. 什么是阻塞/非阻塞? 阻塞:前一个程序未执行完就得一直等待 非阻塞:前一个程序未执行完时可以挂起,继续执行其他程序,等到使用时再执行 6. 什么是事件? 一个触发动作(例如点击按钮) 7. 什么是事件驱动? 一个触发动作引起的操作(例如点击按钮后弹出一个对话框) 8. 什么是基于事件驱动的回调? 为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回调函数,这种函数执行的方式叫做事件驱动~这种注册回调就是基于事件驱动的回调,如果这些回调和异步I/O(数据写入、读取)操作有关,可以看作是基于回调的异步I/O,只不过这种回调在nodejs中是有事件来驱动的 9. 什么是事件循环? //事件循环Eventloop,倘若有大量的异步操作,一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回调函数,从而来完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理,这种机制叫做事件循环. 总而言之就是:管理大量异步操作的机制叫做事件循环 Event Loop: 回调函数队列。异步执行的函数会被压入这个队列; 队列被循环查询

    查看全部
  • 请求方法:

    get:获取数据

    post:提交数据

    put:更新发布数据

    delete:删除

    head类同get


    状态码:

    1XX:已提交请求,进行处理

    2XX:已提交请求已处理

    3XX:重定向,进一步处理

    4XX:客户端错误,请求有语法错误

    5XX:服务器端错误

    200 ok,请求成功
    400 语法错误
    401 未授权
    403 服务器拒绝
    404 资源不存在
    500服务器发生不可预期的错误
    503 当前不能处理该请求


    查看全部
  • querystring.escape(string) 对字符进行Url转义,querystring.unescape(string)对字符串反转义


    • node自带

    • querystring.stringify(a,b,c)
      将json类型的参数转换成字符串
    a:json参数
    b:键值对分隔符
    c:键值分隔符
     querystring.stringify(
    {name:'echo',
    course:['jade','node'],form:''},
    ',',':');
    运行结果:
    'name:echo,course:jade,
    course:node,form:'
    • querystring.parse(a,b,c)将字符
      串参数转换成json类型
      注:参数和上处方法类似


    查看全部
  • url.parse():将url字符串转换为url对象 

    url.format():将url对象格式化为url 字符串 

    url.resolve():用于解析,接受两个参数,拼接


    • //解析url地址为对象

    • url.parse('一个有参数的URL',true)     //query有解析

    • url.parse('一个有参数的URL')     //query没有解析

        url.parse("//imooc.com",true,true);将第三个参数设置为true后在不知道协议的情况下仍可正确解析域名与路径


    查看全部
  • 模块的流程:

    1、创建模块。teacher.js

    2、导出模块。exports.add = function() {}; export是一个对象,可以挂载属性,number,data, string等。

    3、加载模块。var teacher = require('./teacher.js);

    4、使用模块。teacher.add("Scot");


    查看全部
  • 如果你想要你的模块成为一个特别的对象类型,那么请使用module.exports;
    如果你希望你的模块成为一个传统的模块实例,那么请使用exports。


    expoets和module.exports在调用的时候稍微有点区别,但是他们实现的功能是一样的。如果你想要你的模块成为一个特别的对象类型,那么使用module.exports;如果你期望你的模块成为一个传统的模块实例,那就使用exports。


    查看全部
  • @模块分类:

    >核心模块:http fs path..

    >文件/本地模块:var util=require('./util.js')

    >npm第三方模块:var promise=require('bluebird')

    模块的引用>>路径引用 模块名引用(最终也会被映射为路径)

    包含核心函数的核心模块会在node启动时被预先加载,非核心及第三方模块在之后加载


    NodeJs文件和模块一对一对应关系

    引入文件的2种方式:文件路径引入,文件名引入。

    查看全部
    0 采集 收起 来源:模块的分类

    2018-11-25

  • node.js的版本

    查看全部
    0 采集 收起 来源:Nodejs版本常识

    2018-11-25

  • nodejs.org 官方网站

    npmjs.com nodejs工具网站

    github.com 工程及源码

    stackoverflow.com 疑问解答


    查看全部

举报

0/150
提交
取消
课程须知
我们的教程面向的同学是:有 JavaScript 基础的同学,如果有过任何后台语言开发的经验更适合,对于有基础的同学,可以快进跳着看教程,不必拘束于每一分钟都听,很多时候其实是思路,思路打通了,很多技术细节也就不用纠结了。
老师告诉你能学到什么?
从 Node.js 基础知识入手,比如安装,环境配置、开发环境等,进一步熟悉 Node.js API ,一些 HTTP 知识,并且对模块的概念和使用更加熟悉,从而进阶到模块或者插件的开发,最终能够借助 Node.js 快速实现特定的需求。

微信扫码,参与3人拼团

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

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