nodejs01-

  1. 基本代碼塊
// 按node-http-server回車則自動(dòng)創(chuàng)建好了一個(gè)nodejs的web應(yīng)用程序


var http = require('http'); // 表示引入http模塊
http.createServer(function (request, response) { 
  // request表示客戶端傳過來的信息普泡;response表示給客戶端響應(yīng)的信息

  response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'}); // 設(shè)置響應(yīng)頭

  response.write("你好世界")

  response.end('你好 World'); // 表示給頁面輸出一句話并且結(jié)束響應(yīng)

}).listen(8081); // 端口

console.log('Server running at http://127.0.0.1:8081/');

2.自定義模塊
(1)CommonJS(Nodejs)中自定義模塊的規(guī)定
①我們可以把公共的功能抽離成為一個(gè)單獨(dú)的js文件作為一個(gè)模塊,默認(rèn)情況下這個(gè)模塊里面的方法或?qū)傩酝饨缡菦]法訪問的。如果要讓外界可以訪問娩贷,則必須在模塊里面通過exports或module.exports暴露屬性或方法峭判。
②在需要使用這些模塊的文件中通過require的方式引入這個(gè)模塊即可使用。
(2)引入node_modules下的文件時(shí)粒褒,可以不寫完整其路徑,只寫在node_modules下的路徑诚镰。


  1. (1)Nodejs中除了他自己提供的核心模塊外奕坟,也可以自定義模塊,也可以使用第三方模塊清笨。Nodejs中第三方模塊由包組成月杉,可以通過包來對一組具有相互依賴關(guān)系的模塊進(jìn)行統(tǒng)一管理。
    (2)完全符合CommonJs規(guī)范的包目錄一般包含如下這些文件:
    ①package.json:包描述文件
    ②bin:用于存放可執(zhí)行二進(jìn)制文件的目錄
    ③lib:用于存放JavaScript代碼的目錄
    ④doc:用于存放文檔的目錄
    (3)在Nodejs中用NPM命令來下載第三方的模塊(包)抠艾。
    當(dāng)在項(xiàng)目中引入包時(shí)苛萎,最好是用npm install xxx --save,這樣就會(huì)在package.json中增加相應(yīng)的包版本信息检号,當(dāng)別人拉取代碼時(shí)即可根據(jù)npm下載該包(最新版的node加不加都可)腌歉。
    指定下載的包的版本:npm install xxx@版本號 --save

  2. package.json
    (1)創(chuàng)建package.json:npm init 或 npm init -yes
    (2)dependencies里面保存的是項(xiàng)目所需要的一些包;devDependencies里面保存的是項(xiàng)目所需要的其他包齐苛,主要放的是一些工具(npm install xxx --save-dev)翘盖。
    (3)

"md5": "^2.3.4"
// ^表示第一位版本號不變,后面兩位取最新凹蜂;
// ~表示前兩位不變馍驯,最后一個(gè)取最新;
// *表示全部取最新
  1. fs模塊的使用
    (1)fs.stat():檢測是文件還是目錄
// 引入fs模塊
var fs = require('fs')

// fs.stat 檢測目標(biāo)是文件還是目錄
fs.stat('./html',(err,data)=>{
    if(err){
        console.log(err)
    }
    console.log(`是文件:${data.isFile()}`)
    console.log(`是目錄:${data.isDirectory()}`)
})

(2)fs.mkdir():創(chuàng)建目錄
三個(gè)參數(shù):①path 將創(chuàng)建的目錄路徑玛痊;②mode 目錄權(quán)限(讀寫權(quán)限)汰瘫;③callback 回調(diào),傳遞異常參數(shù)err

fs.mkdir('./css',err=> {
    if(err) {
        console.log(err)
    }
    console.log('創(chuàng)建成功')
})

(3)fs.writeFie() 創(chuàng)建寫入文件
若文件不存在擂煞,則直接創(chuàng)建寫入混弥,若文件存在,則直接替換文件內(nèi)容颈娜。

fs.writeFile('./html/index.html','你好nodejs',(err)=> {
    if(err) {
        console.log(err)
    }
    console.log('創(chuàng)建寫入文件成功')
})

(4)fs.appendFile() 追加文件剑逃,用法與fs.writeFie()類似
(5)fs.readFile() 讀取文件

fs.readFile('./html/index.html',(err,data)=> {
    if(err) {
        console.log(err)
    }
    console.log('讀取文件成功',data) // 直接讀取的是二進(jìn)制的Buffer文件
    console.log(data.toString()) // 將Buffer轉(zhuǎn)化成string類型
})
image.png

(6)fs.readdir() 讀取目錄浙宜,與fs.readFile() 用法類似
(7)fs.rename() 功能:重命名;移動(dòng)文件

// 重命名功能
fs.rename('./html/index.html','./html/index1.html',err=> {
    if(err) {
        console.log(err)
    }
    console.log('重命名成功')
})
// 移動(dòng)文件功能
fs.rename('./html/index1.html','./css/index1.html',err=> {
    if(err) {
        console.log(err)
    }
    console.log('移動(dòng)文件成功')
})
image.png

(8)fs.mkdir() 刪除目錄
(9)fs.unlink() 刪除文件
(10)
①案例一

// 1. 判斷服務(wù)器上有沒有upload目錄蛹磺,沒有則創(chuàng)建粟瞬,有則不做操作
const fs = require('fs');

fs.stat('./upload',(err,data)=> {
    if(err) {
        console.log('upload目錄不存在,要?jiǎng)?chuàng)建upload目錄')
        mkdir('./upload')
    }
    else if(data.isDirectory()){
        console.log('upload目錄存在')
    } else {
        console.log('upload文件存在萤捆,但upload文件夾不存在裙品,仍要?jiǎng)?chuàng)建upload目錄')
        // 首先刪除upload文件(不包括upload.html等有后綴名的文件),再創(chuàng)建文件夾
        fs.unlink('./upload',err=> {
            if(!err) {
                mkdir('./upload')
            }
            else {
                console.log('請檢查傳入的文件是否正確')
            }
        })
    }
})

function mkdir(dir) {
    fs.mkdir(dir,err=> {
        if(err) {
            console.log()
        }
        console.log('創(chuàng)建目錄成功')
    })
}
image.png

②案例二

// 2. wwwroot文件夾下有images html css js以及index.html俗或,找出wwwroot目錄下面所有的目錄市怎,然后放在一個(gè)數(shù)組中
const fs = require('fs')

// 注意:錯(cuò)誤的寫法如下,打印出的兩個(gè)dirArr都是空
var path = './wwwroot'
var dirArr = []
 fs.readdir(path,(err, data)=> {
     if(err) {
         console.log(err)
     }
     for(var i=0;i<data.length;i++) {
    // fs模塊方法是異步的,所以在for循環(huán)結(jié)束后才執(zhí)行fs方法辛慰,此時(shí)data[4]不是文件夾区匠,故dirArr值為空
         fs.stat(path+'/'+data[i],(err,stats)=> {
             if(err) {
                 console.log(err)
             }
             else if(stats.isDirectory()) {
                dirArr.push(data[i])
             }
         })
     }
     console.log(dirArr)
 })
 console.log(dirArr)


 // 改正:1. 改造for循環(huán),遞歸實(shí)現(xiàn)(如下帅腌,但可讀性差)
 var path = './wwwroot'
var dirArr = []
 fs.readdir(path,(err, data)=> {
     if(err) {
         console.log(err)
         return;
     }
     // 立即執(zhí)行函數(shù)
     (function getDir(i){
         if(i==data.length) {
             // 執(zhí)行完成
             console.log(dirArr);
             return; // return必須加上驰弄,否則報(bào)錯(cuò)
         }
        fs.stat(path+'/'+data[i],(err,stats)=> {
            if(err) {
                console.log(err)
            }
            else if(stats.isDirectory()) {
               dirArr.push(data[i])
            }
            getDir(i+1) //遞歸調(diào)用
        })
     })(0)
 })
image.png

(11)fs.createReadStream 從文件流中讀取數(shù)據(jù)

// 以流的方式讀取數(shù)據(jù)是一點(diǎn)點(diǎn)讀取的
const fs = require('fs')

var readStream = fs.readStream('./data/output.txt');

var count = 0
var str = '';
readStream.on('data',(data)=> { // 監(jiān)聽讀取狀態(tài)
    str+=data;
    count++;
})

readStream.on('end',(data)=> { // 當(dāng)為end時(shí)結(jié)束
    console.log(str)
    console.log(count)
})

readStream.on('err',(data)=> { // 監(jiān)聽錯(cuò)誤信息
    console.log(err)
})

(12)fs.createWriteStream 從文件流中讀取數(shù)據(jù)

const fs = require('fs')
var str = ''

for(var i=0;i<500;i++) {
    str += 'bjyxszd!\n';
}

var writeStream = fs.createWriteStream('./data/input.txt')

writeStream.write(str);

writeStream.end(); // 標(biāo)記文件末尾

writeStream.on('finnish',()=> { // 監(jiān)聽寫入完成
    console.log('寫入完成')
})

(13)管道流
定義:管道流用于讀取一個(gè)文件內(nèi)容并將內(nèi)容寫到另外一個(gè)文件中

const fs = require('fs');

var readStream = fs.createReadStream('./aaa.jpg')
var writeStream = fs.createWriteStream('./data/aaa.jpg')

readStream.pipe(writeStream)
// 原文件仍存在
  1. 路由
    定義:路由是由一個(gè)URL(或者叫路徑)和一個(gè)特定的HTTP方法(GET、POST等)組成的速客,涉及到應(yīng)用如何響應(yīng)客戶端對某個(gè)網(wǎng)站節(jié)點(diǎn)的訪問戚篙。即針對不同請求的URL處理不同的業(yè)務(wù)邏輯。

  2. EJS模塊引擎
    定義:EJS是后臺(tái)模板溺职,可以把我們數(shù)據(jù)庫和文件讀取的數(shù)據(jù)顯示到html頁面上岔擂。它是一個(gè)第三方模塊,需要通過npm安裝浪耘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乱灵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子七冲,更是在濱河造成了極大的恐慌阔蛉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件癞埠,死亡現(xiàn)場離奇詭異,居然都是意外死亡聋呢,警方通過查閱死者的電腦和手機(jī)苗踪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來削锰,“玉大人通铲,你說我怎么就攤上這事∑鞣罚” “怎么了颅夺?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵朋截,是天一觀的道長。 經(jīng)常有香客問我吧黄,道長部服,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任拗慨,我火速辦了婚禮廓八,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赵抢。我一直安慰自己剧蹂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布烦却。 她就那樣靜靜地躺著宠叼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪其爵。 梳的紋絲不亂的頭發(fā)上冒冬,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機(jī)與錄音醋闭,去河邊找鬼窄驹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛证逻,可吹牛的內(nèi)容都是我干的乐埠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼囚企,長吁一口氣:“原來是場噩夢啊……” “哼丈咐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起龙宏,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤棵逊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后银酗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辆影,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年黍特,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛙讥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灭衷,死狀恐怖次慢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤迫像,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布劈愚,位于F島的核電站,受9級特大地震影響闻妓,放射性物質(zhì)發(fā)生泄漏菌羽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一纷闺、第九天 我趴在偏房一處隱蔽的房頂上張望算凿。 院中可真熱鬧,春花似錦犁功、人聲如沸氓轰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽署鸡。三九已至,卻和暖如春限嫌,著一層夾襖步出監(jiān)牢的瞬間靴庆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工怒医, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炉抒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓稚叹,卻偏偏與公主長得像焰薄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子扒袖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容