国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

node學(xué)習(xí)

UsherChen / 2077人閱讀

摘要:頂層對(duì)象中的頂層對(duì)象是中頂層對(duì)象是沒(méi)有這個(gè)概念的模塊化在中一個(gè)文件就是一個(gè)模塊每一個(gè)模塊都有自己的作用域每一個(gè)模塊都是屬于當(dāng)前作用域的而不是全局的全局的作用域但是在仍然不能使用每一個(gè)模塊都有自己的全局就會(huì)得到文件當(dāng)前的位置這就是的本身的模塊

頂層對(duì)象

js中的頂層對(duì)象是window
node中頂層對(duì)象是global 沒(méi)有window這個(gè)概念

node的模塊化

在node中一個(gè)文件就是一個(gè)模塊 每一個(gè)模塊都有自己的作用域 每一個(gè)模塊都是屬于當(dāng)前作用域的而不是全局的 全局的作用域

var a=1;
console.log(a)  //1
global.a=100;
console.log(a)  //1
console.log(global.a)  //100

但是在2.js仍然不能使用global.js

每一個(gè)模塊都有自己的全局 __filename 就會(huì)得到文件當(dāng)前的位置
這就是node 的本身的模塊化的機(jī)制

node加載其他的模塊

require("./1.js") 引入1.js這個(gè)模塊
在加載其他的模塊的時(shí)候
1、首先按照加載的模塊文件名稱(chēng)進(jìn)行查找
2、如果沒(méi)有找到 在模塊文件名稱(chēng)后邊加上.js 進(jìn)行查找
3、如果還沒(méi)有找到 在模塊文件名稱(chēng)后邊加上.json 進(jìn)行查找
4、如果還沒(méi)有找到 在模塊文件名稱(chēng)后邊加上.node 進(jìn)行查找 如果還沒(méi)有找到就會(huì)報(bào)錯(cuò)

module 和module.exorts

在一個(gè)模塊中通過(guò)var定義的變量 其作用域范圍是當(dāng)前模塊 外部模塊是不能夠直接訪問(wèn)這個(gè)變量 如果我們想讓在外邊去訪問(wèn)這個(gè)模塊變量 可以使用
1、全局掛載的方式 把這個(gè)變量作為global的屬性
1.js中

global.a=1;

2.js中

require("./1.js")
console.log(__filename)
console.log(a)  //1   訪問(wèn)到了1.js中的a的值

就可以訪問(wèn)到global.a
但是這樣的做法是不推介的
2、使用模塊對(duì)象 module對(duì)象 每一個(gè)模塊都會(huì)有這個(gè)module對(duì)象
module對(duì)象 保存提供和當(dāng)前模塊有關(guān)的一些信息 訪問(wèn)這個(gè)對(duì)象可以得到以下的信息
id: ".", 當(dāng)前模塊的唯一標(biāo)識(shí)
exports: {}, 通過(guò)這個(gè)對(duì)象 將一個(gè)模塊中的局部變量暴露出來(lái)
parent: null,
filename: "G:gitworkspace ode2.js",
loaded: false,
children:
[ Module {

   id: "G:gitworkspace
ode1.js",
   exports: {},
   parent: [Circular],
   filename: "G:gitworkspace
ode1.js",
   loaded: true,
   children: [],
   paths: [Object] } ],

paths:
[ "G:gitworkspace ode ode_modules",

 "G:gitworkspace
ode_modules",
 "G:
ode_modules" ] }
 

在這個(gè)module有一個(gè)很重要的子對(duì)象 exports 對(duì)象 可以通過(guò)這個(gè)對(duì)象將模塊中的局部對(duì)象暴露
1.js

var a=1;
module.exports.a=a;

2.js

var m1=require("./1.js")
console.log(m1.a)   //就可以輸出1了

在模塊作用域內(nèi) 還有一個(gè)內(nèi)置的模塊對(duì)象 全局的exports 其實(shí)就是module.exports
console.log(exports===module.exports) //true
但是在使用的過(guò)程中需要注意小細(xì)節(jié) 不要讓module.exports的引用斷開(kāi)

1.js中

var a=1;
module.exports=[1,2,3];   //斷開(kāi)了module.exports的引用
exports.a=a;

2.js中

var m1=require("./1.js")   //require的返回對(duì)象就是1.js模塊中的module
console.log(m1.a)   //undefined   這里就訪問(wèn)不到了a
console.log(exports===module.exports)

同時(shí)在模塊作用域內(nèi),還有一個(gè)內(nèi)置的模塊對(duì)象,exports 他其實(shí)就是module.exports 如上
所以在使用模塊化的時(shí)候 盡量是在module.exports或者exports添加屬性 而不是具體的更改引用地址

__filename

每一個(gè)模塊作用域下邊都有這樣的一個(gè)屬性 代表的是這個(gè)文件所在目錄的路徑 蛋撻不是全局的屬性 只是模塊作用域的一個(gè)固有的屬性

__dirname

返回的是當(dāng)前文件解析后的絕對(duì)路徑 不帶文件本身 也是模塊的固定屬性不是global的屬性
setInterval函數(shù) clearInterval()
setTimeout函數(shù) clearTimeout() 這四個(gè)函數(shù)都可以使用

process全局對(duì)象

是global對(duì)象的屬性 通過(guò)對(duì)process對(duì)象的訪問(wèn) 可以得到訪問(wèn)當(dāng)前的進(jìn)程 使我們可以對(duì)當(dāng)前運(yùn)行的程序的進(jìn)程進(jìn)行訪問(wèn)和控制 process對(duì)象有如下的屬性
stdin stdout 標(biāo)準(zhǔn)輸入輸出流 默認(rèn)情況輸入流是關(guān)閉的 所以使用的時(shí)候先開(kāi)啟
標(biāo)準(zhǔn)輸入設(shè)備:鍵盤(pán) 鼠標(biāo) 攝像頭 掃描儀

process.stdin.resume();
process.stdin.on("data",function (data) {
    process.stdout.write(data)
})

實(shí)現(xiàn)了 用戶(hù)輸入什么 回車(chē)的時(shí)候就會(huì)輸出什么
標(biāo)準(zhǔn)輸出設(shè)備:顯示器 繪圖儀
想控制太輸出 process.stdout.write("sas")
1、argv
數(shù)組 包含命令行參數(shù)的數(shù)組
會(huì)輸出
[ "C:Program Files odejs ode.exe", //運(yùn)行改程序的編譯器
"G:gitworkspace ode2.js" ] //當(dāng)前的.js文件
2、env
會(huì)得道用戶(hù)的運(yùn)行環(huán)境 所以這里也可以看出js操作的是瀏覽器 node操作的是系統(tǒng)
3、version
返回node的版本
4、pid
返回當(dāng)前進(jìn)程的pid
5、title
返回當(dāng)前進(jìn)程顯示的名稱(chēng)
6、platform
返回操作平臺(tái)的信息
7、exit()
退出這個(gè)進(jìn)程

Buffer

一個(gè)用于更好的操作二進(jìn)制數(shù)據(jù)的類(lèi) 從文件或輸入流中讀取內(nèi)容
使用方法
1、 var buffer=new Buffer(10) //創(chuàng)建一個(gè)buffer對(duì)象 并為這個(gè)對(duì)象分配一個(gè)大小
當(dāng)我們一個(gè)buffer分配空間以后 其長(zhǎng)度是固定的 不能更改
2、使用數(shù)組來(lái)新建一個(gè)buffer var bb=new Buffer([1,2,3])
這種方式聲明的buffer的長(zhǎng)度也是固定的
3、使用字符串聲明一個(gè)buffer var ss=new Buffer(string,"utf-8");
把字符串轉(zhuǎn)化為二進(jìn)制格式的
將16進(jìn)制的編碼轉(zhuǎn)化為字符 String.fromCharCode()
buffer的方法
1、buffer的write方法

var ss=new Buffer("sasasa");
for(var i=0;i

buffer.write(string,[offset] )作用是根據(jù)參數(shù)offset來(lái)指定開(kāi)始添加字符串的

var ss="miaov"
var bf=new Buffer(5);
bf.write(ss)
console.log(bf)  //

但是指定了offset以后

var ss="miaov"
var bf=new Buffer(5);
bf.write(ss,2)
console.log(bf)  //

2、buffer.toString() 方法 將buffer轉(zhuǎn)換成字符串

var ss="miaov"
var bf=new Buffer(5);
bf.write(ss)
console.log(bf.toString())  //miaov
var ss="妙味"
var bf=new Buffer(ss);
console.log(bf)  //

所以在node中一個(gè)漢字占3個(gè)字節(jié)
3、buffer.tojson()
將buffer中的內(nèi)容轉(zhuǎn)化為json格式數(shù)據(jù)
4、buffer.slice(start,end)
截取buffer中的一部分 但是和原來(lái)的老的buffer引用的是一個(gè)地址 改變這個(gè)新的buffer就會(huì)改變?cè)瓉?lái)的5、5、buffer.copy(復(fù)制內(nèi)容到的新區(qū)域)
但是這個(gè)新區(qū)域的引用地址和原來(lái)的地址不是同一個(gè)地址 所以更改新的區(qū)域不會(huì)更改原來(lái)的buffer
6、buffer的靜態(tài)方法 不需要在實(shí)例上邊調(diào)用的方法
檢測(cè) Buffer是否支持某種編碼 Buffer.isEncoding("utf-8") 檢測(cè)是否支持utf-8編碼
檢測(cè) 某個(gè)變量是否是Buffer Buffer.isBuffer(變量)
Buffer.concat(存著buffer的數(shù)組) 返回這個(gè)數(shù)組內(nèi)每一個(gè)元素拼接好的buffer

文件系統(tǒng) File System

首先要引入 fs模塊
1、fs.open方法 異步的方式打開(kāi)文件 不會(huì)阻塞后邊代碼的執(zhí)行 通過(guò)回調(diào)函數(shù)對(duì)讀取結(jié)果進(jìn)行處理
fs.open(path,flags,[model],callback)
path 所在的路徑
flags 打開(kāi)文件的方式 r讀的方式 r+讀寫(xiě)方式
model 設(shè)置文件的模式 讀/寫(xiě)/執(zhí)行 4/2/1
callback 當(dāng)通過(guò)open方法以后 調(diào)用callback 有兩個(gè)參數(shù) error fd(文件的標(biāo)識(shí))
文件的標(biāo)識(shí)是唯一的標(biāo)識(shí)這個(gè)文件 以便于后邊通過(guò)這個(gè)編號(hào)來(lái)操作這個(gè)打開(kāi)的文件 從3開(kāi)始
2、fs.openSync(path,flags) 會(huì)阻塞后邊代碼的執(zhí)行 通過(guò)這個(gè)方法返回值對(duì)讀取結(jié)果進(jìn)行處理
3、fs.read(fd,buffer,offset,length,position,callback)

fs.open("1.txt","r",function (error,fd) {
    if(error){
        console.log("文件打開(kāi)失敗")
    }
      //fs.read(fd,buffer,offset,length,position,callback)
    //剛才讀取成功的文件的唯一標(biāo)識(shí)fd
    var bf1=new Buffer(10);
    //offset   新的內(nèi)容添加到的buffer的起始位置
    //length   讀取的長(zhǎng)度
    //position  從文件的哪里開(kāi)始
    //callback  回調(diào)函數(shù)  的參數(shù)error newbf的length newbf新的buffer
    fs.read(fd,bf1,0,4,null,function (error,len,newbf) {
        console.log(error)  //null
        console.log(len)  //4
        console.log(newbf)  //
    })
})

4、fs.writeSync() fs的同步版本
5、fs.write(fd,buffer,offset,length,position,callback)

buffer  要寫(xiě)入的數(shù)據(jù)
offset  buffer對(duì)象中要寫(xiě)入的數(shù)據(jù)起始位置
length  buffer對(duì)象中要寫(xiě)入的數(shù)據(jù)的長(zhǎng)度
position  fd中的起始位置  文件中開(kāi)始寫(xiě)的位置
callback  回調(diào)函數(shù)  error  buffer的length 寫(xiě)入的buffer

fs.write另一種使用方法 fs.write(fd,"wqds找室內(nèi)設(shè)計(jì)師",5,"utf-8")

fs.open("1.txt","w",function (error,fd) {
     if(error){
         console.log("文件打開(kāi)失敗")
     }
    else{
         var bf=new Buffer("123");
         fs.write(fd,bf,0,3,0,function (error,length) {
              console.log(arguments)
         })
     }
})

6、fs.writeSync() buffer的同步的版本
7、fs.close(fd,callback) 文件打開(kāi)以后 一定要對(duì)文件進(jìn)行關(guān)閉
以上方法都是在文件打開(kāi)以才能執(zhí)行的 下面這些方法自帶打開(kāi)文件的方法
8、fs.writeFile(filename,data,[options],callback) 如果文件不存在就回新建一個(gè)文件 而不會(huì)報(bào)錯(cuò)
如果文件存在 則新的data會(huì)直接覆蓋原有的內(nèi)容

var fileName="2.txt";
fs.writeFile(fileName,"sasa",function () {
      
})

以上的方法就會(huì)新建一個(gè)2.txt
9、fs.writeFileSync(filename,data,[options]) 同步版本
10、fs.appendFile(filename,data,callback) 異步的向文件寫(xiě)入數(shù)據(jù)
如果文件不存在就回新建一個(gè)文件 而不會(huì)報(bào)錯(cuò)
如果文件存在 則新的data會(huì)追加到原有的內(nèi)容后邊
當(dāng)然也有同步版本
11、fs.exists(path,callback) 檢查指定的目錄是否存在 當(dāng)然也有同步版本
12、fs.readFile(fileName,callback)
如果直接輸出data 會(huì)得到的是一個(gè)buffer

fs.readFile("1.txt",function (error,data) {
    if(error){
        console.log("讀取失敗")
    }
    else{
        console.log(data.toString())
    }
})

當(dāng)然也有同步的版本
13、fs.unlink(fileName,callback) 刪除這個(gè)文件

var fileName="2.txt";
fs.unlink(fileName,function (error) {
    if(error){
        console.log(error) 
    }
})

就會(huì)刪除2.txt
13、fs.rename(fileName,newName,callback)
14、fs.sat(filename,callback) 會(huì)在callback中得到文件的信息
15、fs.mkdir(path,[mode],callback) 創(chuàng)建文件夾
16、fs.rmdir(path,callback) 刪除文件夾

node實(shí)現(xiàn)web開(kāi)發(fā)-->http模塊

客戶(hù)端發(fā)送一個(gè)http請(qǐng)求到指定的服務(wù)器端->服務(wù)器端接受并處理請(qǐng)求->返回?cái)?shù)據(jù)到客戶(hù)端
使用http模塊就可以搭建一個(gè)web服務(wù)器
1、這個(gè)模塊下有一個(gè)createServer(回調(diào)函數(shù))來(lái)創(chuàng)建一個(gè)服務(wù)器
2、服務(wù)器調(diào)用.listen(端口號(hào),[主機(jī)名],[callback]) 來(lái)實(shí)現(xiàn)監(jiān)聽(tīng)某一窗口
3、server.on(error,callback) 當(dāng)服務(wù)器開(kāi)啟發(fā)生錯(cuò)誤了 就會(huì)觸發(fā)這個(gè)事件
5、server.on("listening",callback) 當(dāng)服務(wù)器正式監(jiān)聽(tīng)的時(shí)候就會(huì)觸發(fā)這個(gè)事件
6、server.on("request",callback) 當(dāng)有客戶(hù)端發(fā)起請(qǐng)求的時(shí)候 就會(huì)觸發(fā)這個(gè)事件
request
這個(gè)里邊有一個(gè)對(duì)象IncomingMessage 包含以下的信息
得到客戶(hù)端發(fā)送過(guò)來(lái)的信息 url method
response
res.write(data)
res.end() 服務(wù)器的響應(yīng)已經(jīng)發(fā)送完成了 必須調(diào)用
res.writeHead(狀態(tài)碼,描述,頭信息) 設(shè)置頭信息
頭信息:{‘content-type’:"text/html;charset=utf-8"}

    text/html  按照html處理   text/plain   告訴客戶(hù)端按照文本處理

當(dāng)然如果不希望寫(xiě)在頭信息 這一部分的話 也就是上邊的那個(gè)鍵值對(duì)里邊
也可以調(diào)用 res.setHeader(key,value)

url的處理

通過(guò)req得到url req.url
在url中 ?后面的內(nèi)容叫做查詢(xún)字符串
在node中有專(zhuān)門(mén)處理url的模塊 引入url模塊

var http=require("http");
var url=require("url");
var server=http.createServer(function (req,res) {
      var urlString=url.parse(req.url);
      console.log(urlString)
      res.write("sasa");
      res.end();
})
server.listen(3000);

在這個(gè)urlString中包 協(xié)議 主機(jī) 端口

                hash  哈希值部分#后面的內(nèi)容 
                search  ?+后面的內(nèi)容
                query   ?后面的內(nèi)容 

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/88844.html

相關(guān)文章

  • 學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之二叉搜索樹(shù)

    摘要:二叉搜索樹(shù)是二叉樹(shù)的一種,其特征是左側(cè)子節(jié)點(diǎn)存儲(chǔ)比父節(jié)點(diǎn)小的值,右側(cè)子節(jié)點(diǎn)存儲(chǔ)比父節(jié)點(diǎn)大或等于父節(jié)點(diǎn)的值。實(shí)現(xiàn)和這個(gè)兩個(gè)方法其實(shí)挺簡(jiǎn)單的,最小的節(jié)點(diǎn)就在二叉搜索樹(shù)的最左反之,最大的就在最右。 本系列所有文章:第一篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊(duì)列第二篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之鏈表第三篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之集合第四篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之字典和散列表第五篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)...

    denson 評(píng)論0 收藏0
  • 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(四):二叉搜索樹(shù)

    摘要:像剛才的這幅圖,就是二叉搜索樹(shù)。而我們本文要學(xué)習(xí)的內(nèi)容,就是如何寫(xiě)一個(gè)二叉搜索樹(shù)。但在二叉搜索樹(shù)中,我們把節(jié)點(diǎn)成為鍵,這是術(shù)語(yǔ)。前端路漫漫,且行且歌的前端樂(lè)園原文鏈接寒假前端學(xué)習(xí)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法四二叉搜索樹(shù) 本系列的第一篇文章: 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(一),棧與隊(duì)列第二篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(二):鏈表第三篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)...

    ingood 評(píng)論0 收藏0
  • 萌新的node教程

    摘要:二安裝完成萌新會(huì)問(wèn)幾個(gè)萌萌的問(wèn)題為什么桌面沒(méi)有增加的圖標(biāo)快捷方式答額因?yàn)橛辛宋覀円灿貌坏讲恢肋€有沒(méi)有更好的答案。我本人還是比較喜歡用如果下載并安裝了,就可以直接使用這個(gè)命令行工具了。關(guān)于命令行工具會(huì)單獨(dú)開(kāi)個(gè)坑。 node學(xué)習(xí)的第一步 一、前言 你可能已經(jīng)基本掌握了html、css、和JavaScript,可能已經(jīng)獨(dú)立完成一些網(wǎng)頁(yè)效果,但是一踏入node相關(guān)的領(lǐng)地就感覺(jué)手足無(wú)措,對(duì)后臺(tái)...

    zeyu 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類(lèi)中文書(shū)籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來(lái)越多的科技公司和開(kāi)發(fā)者開(kāi)始使用開(kāi)發(fā)各種應(yīng)用。 說(shuō)明 2017-12-14 我發(fā)了一篇文章《沒(méi)用過(guò)Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車(chē)的還坐過(guò)站了。大家可以很...

    Edison 評(píng)論0 收藏0
  • 【全文】狼叔:如何正確的學(xué)習(xí)Node.js

    摘要:感謝大神的免費(fèi)的計(jì)算機(jī)編程類(lèi)中文書(shū)籍收錄并推薦地址,以后在倉(cāng)庫(kù)里更新地址,聲音版全文狼叔如何正確的學(xué)習(xí)簡(jiǎn)介現(xiàn)在,越來(lái)越多的科技公司和開(kāi)發(fā)者開(kāi)始使用開(kāi)發(fā)各種應(yīng)用。 說(shuō)明 2017-12-14 我發(fā)了一篇文章《沒(méi)用過(guò)Node.js,就別瞎逼逼》是因?yàn)橛腥嗽谥跎虾贜ode.js。那篇文章的反響還是相當(dāng)不錯(cuò)的,甚至連著名的hax賀老都很認(rèn)同,下班時(shí)讀那篇文章,竟然坐車(chē)的還坐過(guò)站了。大家可以很...

    fengxiuping 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<