-
多人協作或者是需要引入大量的js時很容易出現變量被覆蓋,方法被重寫,特別是存在依賴關系時,很容易導致出錯,模塊管理機制就很好的避免了這一問題,Commonjs規范,Node.js借鑒了其規范
查看全部 -
命令行輸入node進入node執行環境,可執行javascript,如
var a = 1; var b = 2; var add = function(a,b){return a + b;};
add(a,b);
會得到執行結果為3;
谷歌瀏覽器f12點console輸入也可執行,兩者是執行環境的不同,瀏覽器的全局變量為window,node的全局變量為process
查看全部 -
進入項目目錄 cd XXX
ls 查看當前目錄
node XX.js 執行XX.js里寫的目錄命令
以下基于v10.15.0書寫
var http = require('http');
http.createServer(function(req,res){
res.statusCode = 200;
res.setHeader('Content-Type','text/plain');
res.end('Hello! Node.js')
}).listen(3000,'127.0.0.1',function(){
console.log("啟動完畢");
})
console.log("server run!")
執行結果??server run!? ?啟動完畢? 說明為非阻塞執行
改變js命令后需要重新啟動服務刷新頁面生效
此寫法為鏈式調用 可以拆開 var server = http.creatServer..... ;? server.listen(...
查看全部 -
工具 git bash?
https://www.git-scm.com/downloads
官網安裝node
可用git bash 或者開始菜單輸入cmd啟動系統自帶命令行通過查看版本號看是否安裝成功?
node -v? ? ?npm -v
輸入 node 回車進入node環境 可執行命令如1+2 ,ctrl+c 退出環境
查看全部 -
學習參考網站:
https://nodejs.org/en/?官網 了解更新等
https://www.npmjs.com/?項目初始可以來找包看架構
https://github.com/? 閱讀優秀的源碼是快速提高的方法
https://stackoverflow.com/?技術問答社區
查看全部 -
node的全局變量是:process
查看全部 -
使用n模塊管理node版本,n+版本號,安裝版本,在已安裝的版本中上下鍵切換
查看全部 -
var https = require('https')
var querystring = require('querystring')
var postData = querystring.stringify({
'content': '覺得老師講課風格很幽默',
'cid': '348'
})
var options = {
host: 'www.xianlaiwan.cn',
port: 443,
path: '/course/docomment',
methods: "POST",
headers: {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Connection": "keep-alive",
"Content-Length": postData.length,
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "imooc_uuid=24c9737a-e062-45a5-adba-abcdee6cdac9; imooc_isnew_ct=1540445186; imooc_isnew=2; zg_did=%7B%22did%22%3A%20%22166e6b1e449cf2-0cb6c25626a0b3-594d2a16-1fa400-166e6b1e44bca9%22%7D; Hm_lvt_fb538fdd5bd62072b6a984ddbc658a16=1540445186,1540452644,1541410617,1541570612; loginstate=1; apsid=Q4MmZjNjY5NDMxNWZiNDgwNmU0MTgxYWI0ZGYyZWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzY4NjI2NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDQ5MTk0NjA4QHFxLmNvbQAAAAAAAAAAAAAAAAAAADllN2I0NjhjY2E3OGU4MjYxY2FiODcxNWVmZGVlNzdjvhEPXGtV01k%3DY2; PHPSESSID=igfbk13je3di0qcn82oa9n5f65; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1544166148,1544434856,1545014246,1545613505; cninfo=syb20-e1b10d50f61d93b98befa04edc7c22a5; IMCDNS=0; userId=15458167777966; zg_f375fe2f71e542a4b890d9a620f9fb32=%7B%22sid%22%3A%201545896243734%2C%22updated%22%3A%201545896243830%2C%22info%22%3A%201545619079648%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%22POesjyNXSEI%2C%22%2C%22zs%22%3A%200%2C%22sc%22%3A%200%7D; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1545896244; cvde=5c2030bcbf744-362",
"Host": "www.xianlaiwan.cn",
"Origin": "http://www.xianlaiwan.cn",
"Referer": "http://www.xianlaiwan.cn/video/8837",
"User-Agent": " Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
}
}
var req = https.request(options, function (res) {
console.log('Status:' + res.statusCode)
console.log('Headers:' + JSON.stringify(res.headers))
// 接收數據的時候,node 以流的形式發送,會觸發data事件
res.on('data', function (chunk) {
console.log(Buffer.isBuffer(chunk))
console.log(typeof chunk)
})
res.on('end', function () {
console.log("評論完畢")
})
})
req.on('error', function (e) {
console.log("Error:" + e.message)
})
req.write(postData)
req.end()
查看全部 -
var EventEmitter = require('events').EventEmitter
var life = new EventEmitter()
life.on('買禮物', function (who) {
console.log('買禮物1' + who + '005')
})
life.on('買禮物', function (who) {
console.log('買禮物2' + who + '005')
})
life.on('買禮物', function (who) {
console.log('買禮物3' + who + '001')
})
life.on('買禮物', function (who) {
console.log('買禮物4' + who + '002')
})
life.on('買禮物', function (who) {
console.log('買禮物5' + who + '003')
})
life.on('買禮物', function (who) {
console.log('買禮物6' + who + '004')
})
life.on('買禮物', function (who) {
console.log('買禮物7' + who + '005')
})
life.on('買禮物', function (who) {
console.log('買禮物8' + who + '006')
})
life.on('買禮物', function (who) {
console.log('買禮物9' + who + '007')
})
life.on('買禮物', function (who) {
console.log('買禮物10' + who + '008')
})
life.on('買禮物', function (who) {
console.log('買禮物11' + who + '009')
})
life.on('買禮物', function (who) {
console.log('買禮物12' + who + '010')
})
// life.removeAllListeners()
life.emit('買禮物', '給~')
查看全部 -
// var http = require('http')
var https = require('https')
var cheerio = require('cheerio')
var url = 'http://www.xianlaiwan.cn/learn/348'
function filterChapters(html) {
var $ = cheerio.load(html)
var chapters = $('.chapter')
// [{
// ? ? chapterTitle: '',
// ? ? videos: [
// ? ? ? ? title: '',
// ? ? ? ? id: ''
// ? ? ]
// }]
var courseData = []
chapters.each(function (item) {
var chapter = $(this)
var chapterTitle = chapter.find('.chapter-description').text()
var videos = chapter.find('.video').children('li')
var chapterData = {
chapterTitle: chapterTitle,
videos: []
}
videos.each(function (item) {
var video = $(this).find('.J-media-item')
var videoTitle = video.text()
var id = video.attr('href').split('video/')[1]
chapterData.videos.push({
title: videoTitle,
id: id
})
})
courseData.push(chapterData)
})
return courseData
}
function printCourseInfo(courseData) {
courseData.forEach(item => {
var chapterTitle = item.chapterTitle
console.log(chapterTitle + '\n')
item.videos.forEach(video => {
console.log('【' + video.id + '】' + video.title + '\n')
})
});
}
https.get(url, function (res) {
var html = ''
res.on('data', function (data) {
html += data
})
res.on('end', function () {
var courseData = filterChapters(html)
printCourseInfo(courseData)
})
}).on('error', function () {
console.log('獲取出錯')
})
查看全部 -
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.title +"\n");
})
})
}
查看全部 -
上下文常常代表this變量的值
第一種情況:this==調用這個函數的對象
var pet = {
????words:"...",
????speak:function(){
????console.log(this.words)
????console.log(this === pet)//這里表示this就是pet對象
????}
}
pet.speak();
第二種情況:this指向global;
function pet(words){
????this.word = words;
console.log(this.word);
console.log(this)//這里this指向全局global相當于頁面中的window
}
pet("...")
兩種調用方法打印的this.words是一樣的,但是this卻指向不同的地方。
第三種情況:this指向新new的對象
function pet(words){
this.words = words;
this.speak = function(){
????console.log(this.words);
console.log(this === cat)//指向新構建的對象cat
}
}
var cat = new per("miao")
cat.speak();
::::
this關鍵字指向函數的擁有者&this關鍵字只能在函數內部使用
-----------
使用call和apply可以改變上下文執行對象
var pet = {
words:"...",
speak:function(say){
????console.log(say+" " +this.words);
}
}
pet.speak("speak")
var dog = {
words:"wang"
}
pet.speak.call(dog,"sepak");//制定dog對象為pet的上下文(this)
利用call_apply改變上下文的方法來實現繼承
function Pet(words){
this.words = words;
this.speak = function(){
console.log(this.words);
}
}
function Dog(words){
Pet.call(this,words);
//Pet.apply(this,arguments);
}
var dog = new Dog("Wang");
dog.speak();
//dog同歸call、apply修改上下文實現繼承Pet()的屬性和方法
查看全部 -
11111111
查看全部 -
利用call實現繼承
function Pet(words){
? ? this.words = words
? ? this.speak = function(){
? ? ? ? console.log(this.words)
? ? }
}
function Dog(words){
? ? Pet.call(this,words)
}
var dog = new Dog('wang')
dog.speak()
查看全部 -
調用pet的speak方法,this指針指向了pet對象(pet對象有speak方法),通過call改變了執行上下文,pet.speak的指針就指向了dog
查看全部
舉報