-
// 發(fā)送request請(qǐng)求
// 格式: http.request(Options,function(){})
var http = require('http');
var querystring = require('querystring');
// 評(píng)論的內(nèi)容
var postData = querystring.stringify({
'content':'使用request測(cè)試評(píng)論',
'cid':348,
})
// 定義options,信息來自于general
// general
// Request URL: http://idcbgp.cn/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的值中,
// 需要自己手動(dòng)寫入postData.length,用來做校驗(yàn)
// 如:'Content-Length':postData.length,
var Options = {
hostname:'idcbgp.cn',
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%22idcbgp.cn%22%2C%22cuid%22%3A%20%22lJ-kybg3YwI%2C%22%7D; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1543548949; cvde=5c009481cde1f-13',
'Host': 'idcbgp.cn',
'Origin': 'http://idcbgp.cn',
'Referer': 'http://idcbgp.cn/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'
}
}
// 正式發(fā)送請(qǐng)求
var req = http.request(Options,function(res){
console.log('status: ' + res.statusCode);
console.log(res);
console.log('headers' + JSON.stringify(res.headers));
// chunk是請(qǐng)求之后返回的數(shù)據(jù),為buffer類型
res.on('data',function(chunk){
console.log(Buffer.isBuffer(chunk));
console.log(typeof chunk );
})
res.on('end',function(){
console.log('評(píng)論完畢');
})
})
// 請(qǐng)求異常時(shí)觸發(fā)req.on('error' ,function)
req.on('end',function(e){
console.log('error' + e.message);
})
// 把數(shù)據(jù)寫入到請(qǐng)求體
req.write(postData)
// 最后,手動(dòng)調(diào)用req.end()來結(jié)束請(qǐng)求
req.end()
查看全部 -
模塊的分類:核心模塊、文件模塊、第三方模塊
查看全部 -
2018.10.5最新可用代碼
var http = require('http')
var cheerio = require('cheerio')
var url = 'http://idcbgp.cn/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('獲取課程信息出錯(cuò)!')
})
查看全部 -
一、測(cè)試http性能,appache自帶的ab.
1 ab?-n1000?-c10?http://localhost:2015/(1)-n:總請(qǐng)求數(shù), ?
-c:并發(fā)數(shù),Concurrency[k?n'k?r?nsi](并發(fā)性)。
-t:測(cè)試進(jìn)行的總時(shí)間,-p:post數(shù)據(jù)文件,-w:以html表格形式輸出文件。
(2)2015后要加/
二、重要指標(biāo)
1、Requests per second:服務(wù)器吞吐率。
2、Time per request:用戶平均請(qǐng)求的等待時(shí)間。
3、第2個(gè)Time per request:每個(gè)連接請(qǐng)求時(shí)間實(shí)際運(yùn)行時(shí)間的平均值。
查看全部 -
GitHub瀏覽器快捷鍵T,進(jìn)行搜索文件
快捷鍵Ctrl+F,搜索代碼
查看全部 -
作用域:與調(diào)用函數(shù),訪問變量的能力有關(guān) 作用域分為:局部和全局(在局部作用域里可以訪問到全局作用域的變量,但在局部作用域外面就訪問不到局部作用里面所設(shè)定的變量)?
?上下文:與this關(guān)鍵字有關(guān) 是調(diào)用當(dāng)前可執(zhí)行代碼的引用 ? ? ? this總是指向調(diào)用這個(gè)的方法的對(duì)象 js里的this 通常是當(dāng)前函數(shù)的擁有者,擁有者叫做執(zhí)行上下文。在nodejs中聲明函數(shù)中的this指向全局global,js中指向window。實(shí)例化函數(shù)后,指向當(dāng)前函數(shù)的擁有者。
call和apply可以改變上下文執(zhí)行對(duì)象。(把原來的this全都替換成自己指定的對(duì)象即可理解。)
查看全部 -
1. 什么是回調(diào)? 回調(diào)是異步編程時(shí)的基礎(chǔ),將后續(xù)邏輯封裝成起始函數(shù)的參數(shù),逐層嵌套 2. 什么是同步/異步? 同步是指:發(fā)送方發(fā)出數(shù)據(jù)后,等接收方發(fā)回響應(yīng)以后才發(fā)下一個(gè)數(shù)據(jù)包的通訊方式。 ? 異步是指:發(fā)送方發(fā)出數(shù)據(jù)后,不等接收方發(fā)回響應(yīng),接著發(fā)送下個(gè)數(shù)據(jù)包的通訊方式。 ? 3. 什么是I/O? 磁盤的寫入(in)磁盤的讀?。╫ut) 4. 什么的單線程/多線程? 一次只能執(zhí)行一個(gè)程序叫做單線程 一次能執(zhí)行多個(gè)程序叫多線程 5. 什么是阻塞/非阻塞? 阻塞:前一個(gè)程序未執(zhí)行完就得一直等待 非阻塞:前一個(gè)程序未執(zhí)行完時(shí)可以掛起,繼續(xù)執(zhí)行其他程序,等到使用時(shí)再執(zhí)行 6. 什么是事件? 一個(gè)觸發(fā)動(dòng)作(例如點(diǎn)擊按鈕) 7. 什么是事件驅(qū)動(dòng)? 一個(gè)觸發(fā)動(dòng)作引起的操作(例如點(diǎn)擊按鈕后彈出一個(gè)對(duì)話框) 8. 什么是基于事件驅(qū)動(dòng)的回調(diào)? 為了某個(gè)事件注冊(cè)了回調(diào)函數(shù),但是這個(gè)回調(diào)函數(shù)不是馬上執(zhí)行,只有當(dāng)事件發(fā)生的時(shí)候,才會(huì)調(diào)用回調(diào)函數(shù),這種函數(shù)執(zhí)行的方式叫做事件驅(qū)動(dòng)~這種注冊(cè)回調(diào)就是基于事件驅(qū)動(dòng)的回調(diào),如果這些回調(diào)和異步I/O(數(shù)據(jù)寫入、讀取)操作有關(guān),可以看作是基于回調(diào)的異步I/O,只不過這種回調(diào)在nodejs中是有事件來驅(qū)動(dòng)的 9. 什么是事件循環(huán)? //事件循環(huán)Eventloop,倘若有大量的異步操作,一些I/O的耗時(shí)操作,甚至是一些定時(shí)器控制的延時(shí)操作,它們完成的時(shí)候都要調(diào)用相應(yīng)的回調(diào)函數(shù),從而來完成一些密集的任務(wù),而又不會(huì)阻塞整個(gè)程序執(zhí)行的流程,此時(shí)需要一種機(jī)制來管理,這種機(jī)制叫做事件循環(huán). 總而言之就是:管理大量異步操作的機(jī)制叫做事件循環(huán) Event Loop: 回調(diào)函數(shù)隊(duì)列。異步執(zhí)行的函數(shù)會(huì)被壓入這個(gè)隊(duì)列; 隊(duì)列被循環(huán)查詢
查看全部 -
請(qǐng)求方法:
get:獲取數(shù)據(jù)
post:提交數(shù)據(jù)
put:更新發(fā)布數(shù)據(jù)
delete:刪除
head類同get
狀態(tài)碼:
1XX:已提交請(qǐng)求,進(jìn)行處理
2XX:已提交請(qǐng)求已處理
3XX:重定向,進(jìn)一步處理
4XX:客戶端錯(cuò)誤,請(qǐng)求有語法錯(cuò)誤
5XX:服務(wù)器端錯(cuò)誤
200 ok,請(qǐng)求成功
400 語法錯(cuò)誤
401 未授權(quán)
403 服務(wù)器拒絕
404 資源不存在
500服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 當(dāng)前不能處理該請(qǐng)求查看全部 -
querystring.escape(string)?對(duì)字符進(jìn)行Url轉(zhuǎn)義,querystring.unescape(string)對(duì)字符串反轉(zhuǎn)義
node自帶
querystring.stringify(a,b,c) 將json類型的參數(shù)轉(zhuǎn)換成字符串
a:json參數(shù) b:鍵值對(duì)分隔符 c:鍵值分隔符 ?querystring.stringify( {name:'echo', course:['jade','node'],form:''}, ',',':'); 運(yùn)行結(jié)果: 'name:echo,course:jade, course:node,form:'querystring.parse(a,b,c)將字符 串參數(shù)轉(zhuǎn)換成json類型 注:參數(shù)和上處方法類似
查看全部 -
url.parse():將url字符串轉(zhuǎn)換為url對(duì)象?
url.format():將url對(duì)象格式化為url 字符串?
url.resolve():用于解析,接受兩個(gè)參數(shù),拼接
//解析url地址為對(duì)象
url.parse('一個(gè)有參數(shù)的URL',true)? ? ?//query有解析
url.parse('一個(gè)有參數(shù)的URL')? ? ?//query沒有解析
????url.parse("http://imooc.com",true,true);將第三個(gè)參數(shù)設(shè)置為true后在不知道協(xié)議的情況下仍可正確解析域名與路徑
查看全部 -
模塊的流程:
1、創(chuàng)建模塊。teacher.js
2、導(dǎo)出模塊。exports.add = function() {}; export是一個(gè)對(duì)象,可以掛載屬性,number,data, string等。
3、加載模塊。var teacher = require('./teacher.js);
4、使用模塊。teacher.add("Scot");
查看全部 -
如果你想要你的模塊成為一個(gè)特別的對(duì)象類型,那么請(qǐng)使用module.exports;
如果你希望你的模塊成為一個(gè)傳統(tǒng)的模塊實(shí)例,那么請(qǐng)使用exports。expoets和module.exports在調(diào)用的時(shí)候稍微有點(diǎn)區(qū)別,但是他們實(shí)現(xiàn)的功能是一樣的。如果你想要你的模塊成為一個(gè)特別的對(duì)象類型,那么使用module.exports;如果你期望你的模塊成為一個(gè)傳統(tǒng)的模塊實(shí)例,那就使用exports。
查看全部 -
@模塊分類:
>核心模塊:http fs path..
>文件/本地模塊:var util=require('./util.js')
>npm第三方模塊:var promise=require('bluebird')
模塊的引用>>路徑引用 模塊名引用(最終也會(huì)被映射為路徑)
包含核心函數(shù)的核心模塊會(huì)在node啟動(dòng)時(shí)被預(yù)先加載,非核心及第三方模塊在之后加載
NodeJs文件和模塊一對(duì)一對(duì)應(yīng)關(guān)系
引入文件的2種方式:文件路徑引入,文件名引入。
查看全部 -
node.js的版本
查看全部 -
nodejs.org 官方網(wǎng)站
npmjs.com nodejs工具網(wǎng)站
github.com 工程及源碼
stackoverflow.com 疑問解答
查看全部
舉報(bào)