-
// 发送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()
查看全部 -
模块的分类:核心模块、文件模块、第三方模块
查看全部 -
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('获取课程信息出错!')
})
查看全部 -
一、测试http性能,appache自带的ab.
1 ab -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:每个连接请求时间实际运行时间的平均值。
查看全部 -
GitHub浏览器快捷键T,进行搜索文件
快捷键Ctrl+F,搜索代码
查看全部 -
作用域:与调用函数,访问变量的能力有关 作用域分为:局部和全局(在局部作用域里可以访问到全局作用域的变量,但在局部作用域外面就访问不到局部作用里面所设定的变量)
上下文:与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种方式:文件路径引入,文件名引入。
查看全部 -
node.js的版本
查看全部 -
nodejs.org 官方网站
npmjs.com nodejs工具网站
github.com 工程及源码
stackoverflow.com 疑问解答
查看全部
举报