-
// 發送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: http://www.xianlaiwan.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的值中,
// 需要自己手動寫入postData.length,用來做校驗
// 如:'Content-Length':postData.length,
var Options = {
hostname:'www.xianlaiwan.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%22www.xianlaiwan.cn%22%2C%22cuid%22%3A%20%22lJ-kybg3YwI%2C%22%7D; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1543548949; cvde=5c009481cde1f-13',
'Host': 'www.xianlaiwan.cn',
'Origin': 'http://www.xianlaiwan.cn',
'Referer': 'http://www.xianlaiwan.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'
}
}
// 正式發送請求
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.xianlaiwan.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('獲取課程信息出錯!')
})
查看全部 -
一、測試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("http://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 疑問解答
查看全部
舉報