Days28 Node.js1

1.fs

// fs 是 file-system 的簡寫踏施,就是文件系統(tǒng)的意思
// 例如:fs.readFile 就是用來讀取文件的

// 1. 使用 require 方法加載 fs 核心模塊
var fs = require('fs')
// 2. 讀取文件
//    第一個參數(shù)就是要讀取的文件路徑
//    第二個參數(shù)是一個回調(diào)函數(shù)     
//        成功
//          data 數(shù)據(jù)
//          error null
//        失敗
//          data undefined沒有數(shù)據(jù)
//          error 錯誤對象
fs.readFile('./data/a.txt', function (error, data) {
  // <Buffer 68 65 6c 6c 6f 20 6e 6f 64 65 6a 73 0d 0a>
  // 文件中存儲的其實(shí)都是二進(jìn)制數(shù)據(jù) 0 1
  // 這里為什么看到的不是 0 和 1 呢衅澈?原因是二進(jìn)制轉(zhuǎn)為 16 進(jìn)制了
  // 所以我們可以通過 toString 方法把其轉(zhuǎn)為我們能認(rèn)識的字符
  // console.log(data)
  // console.log(error)
  // console.log(data)
  // 在這里就可以通過判斷 error 來確認(rèn)是否有錯誤發(fā)生
  if (error) {
    console.log('讀取文件失敗了')
  } else {
    console.log(data.toString())
  }
})
fs.writeFile('./data/你好.md', '大家好,給大家介紹一下屋摔,我是Node.js', function (error) {
  // console.log('文件寫入成功')
  // console.log(error)
  if (error) {
    console.log('寫入失敗')
  } else {
    console.log('寫入成功了')
  }
})

2.Http

// 1. 加載 http 核心模塊
var http = require('http')
// 2. 使用 http.createServer() 方法創(chuàng)建一個 Web 服務(wù)器
//    返回一個 Server 實(shí)例
var server = http.createServer()
// 3. 服務(wù)器響應(yīng)請求
server.on('request', function () {
  console.log('收到客戶端的請求了')
})
// 4. 綁定端口號迫悠,啟動服務(wù)器
server.listen(3000, function () {
  console.log('服務(wù)器啟動成功了,可以通過 http://127.0.0.1:3000/ 來進(jìn)行訪問')
})

3.os&path

// 用來獲取機(jī)器信息的
var os = require('os')

// 用來操作路徑的
var path = require('path')

// 獲取當(dāng)前機(jī)器的 CPU 信息
console.log(os.cpus())

// memory 內(nèi)存
console.log(os.totalmem())

// 獲取一個路徑中的擴(kuò)展名部分
// extname extension name
console.log(path.extname('c:/a/b/c/d/hello.txt'))

4.ip 地址用來定位計算機(jī)

端口號用來定位具體的應(yīng)用程序
所有需要聯(lián)網(wǎng)通信的應(yīng)用程序都會占用一個端口號

5. 在 http 協(xié)議中,Content-Type 就是用來告知對方我給你發(fā)送的數(shù)據(jù)內(nèi)容是什么類型

res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.end('hello 世界')

6.代碼寫不寫封號

// ` 是 EcmaScript 6 中新增的一種字符串包裹方式全蝶,叫做:模板字符串
// 它支持換行和非常方便拼接變量
// var foo = `
// 大家好
// hello                            床前明月光
// world
// 哈哈哈`
// console.log(foo)

;`hello`.toString()

// 當(dāng)你采用了無分號的代碼風(fēng)格的時候,只需要注意以下情況就不會有上面的問題了:
//    當(dāng)一行代碼是以:
//        (
//        [
//        `
//        開頭的時候寺枉,則在前面補(bǔ)上一個分號用以避免一些語法解析錯誤抑淫。
//    所以你會發(fā)現(xiàn)在一些第三方的代碼中能看到一上來就以一個 ; 開頭。
//  結(jié)論:
//    無論你的代碼是否有分號姥闪,都建議如果一行代碼是以 (始苇、[、` 開頭的筐喳,則最好都在其前面補(bǔ)上一個分號催式。
//    有些人也喜歡玩兒一些花哨的東西函喉,例如可以使用 ! ~ 等。

7.art-template

var template = require('art-template')
var fs = require('fs')
fs.readFile('./tpl.html', function (err, data) {
  if (err) {
    return console.log('讀取文件失敗了')
  }
  // 默認(rèn)讀取到的 data 是二進(jìn)制數(shù)據(jù)
  // 而模板引擎的 render 方法需要接收的是字符串
  // 所以我們在這里需要把 data 二進(jìn)制數(shù)據(jù)轉(zhuǎn)為 字符串 才可以給模板引擎使用
//template.render(data.toString(), { }) 第一個參數(shù)是要替換的內(nèi)容荣月,第二個是替換內(nèi)容
  var ret = template.render(data.toString(), {
    name: 'Jack',
    age: 18,
    province: '北京市',
    hobbies: [
      '寫代碼',
      '唱歌',
      '打游戲'
    ],
    title: '個人信息'
  })
#html
<body>
  <p>大家好管呵,我叫:{{ name }}</p>
  <p>我今年 {{ age }} 歲了</p>
  <h1>我來自 {{ province }}</h1>
  <p>我喜歡:{{each hobbies}} {{ $value }} {{/each}}</p>
</body>

8.在瀏覽器中使用art-template

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>06-在瀏覽器中使用art-template</title>
</head>
<body>
  <!-- 
    注意:在瀏覽器中需要引用 lib/template-web.js 文件
    強(qiáng)調(diào):模板引擎不關(guān)心你的字符串內(nèi)容,只關(guān)心自己能認(rèn)識的模板標(biāo)記語法哺窄,例如 {{}}
    {{}} 語法被稱之為 mustache 語法捐下,八字胡啊。
   -->
  <script src="node_modules/art-template/lib/template-web.js"></script>
  <script type="text/template" id="tpl">
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <p>大家好萌业,我叫:{{ name }}</p>
      <p>我今年 {{ age }} 歲了</p>
      <h1>我來自 {{ province }}</h1>
      <p>我喜歡:{{each hobbies}} {{ $value }} {{/each}}</p>
    </body>
    </html>
  </script>
  <script>
    var ret = template('tpl', {
      name: 'Jack',
      age: 18,
      province: '北京市',
      hobbies: [
        '寫代碼',
        '唱歌',
        '打游戲'
      ]
    })

    console.log(ret)
  </script>
</body>
</html>

9.##url解析

http
  .createServer(function (req, res) { // 簡寫方式坷襟,該函數(shù)會直接被注冊為 server 的 request 請求事件處理函數(shù)
    // 使用 url.parse 方法將路徑解析為一個方便操作的對象,第二個參數(shù)為 true 表示直接將查詢字符串轉(zhuǎn)為一個對象(通過 query 屬性來訪問)
    var parseObj = url.parse(req.url, true)

    // 單獨(dú)獲取不包含查詢字符串的路徑部分(該路徑不包含 ? 之后的內(nèi)容)
    var pathname = parseObj.pathname

    if (pathname === '/') {
      fs.readFile('./views/index.html', function (err, data) {
        if (err) {
          return res.end('404 Not Found.')
        }
        var htmlStr = template.render(data.toString(), {
          comments: comments
        })
        res.end(htmlStr)
      })
    }

10##重定向

// 如何通過服務(wù)器讓客戶端重定向生年?
      //    1. 狀態(tài)碼設(shè)置為 302 臨時重定向
      //        statusCode
      //    2. 在響應(yīng)頭中通過 Location 告訴客戶端往哪兒重定向
      //        setHeader
      // 如果客戶端發(fā)現(xiàn)收到服務(wù)器的響應(yīng)的狀態(tài)碼是 302 就會自動去響應(yīng)頭中找 Location 婴程,然后對該地址發(fā)起新的請求
      // 所以你就能看到客戶端自動跳轉(zhuǎn)了
      res.statusCode = 302
      res.setHeader('Location', '/')
      res.end()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抱婉,隨后出現(xiàn)的幾起案子档叔,更是在濱河造成了極大的恐慌,老刑警劉巖授段,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹲蒲,死亡現(xiàn)場離奇詭異,居然都是意外死亡侵贵,警方通過查閱死者的電腦和手機(jī)届搁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窍育,“玉大人卡睦,你說我怎么就攤上這事∈ィ” “怎么了表锻?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乞娄。 經(jīng)常有香客問我瞬逊,道長,這世上最難降的妖魔是什么仪或? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任确镊,我火速辦了婚禮,結(jié)果婚禮上范删,老公的妹妹穿的比我還像新娘蕾域。我一直安慰自己,他們只是感情好到旦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布旨巷。 她就那樣靜靜地躺著巨缘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪采呐。 梳的紋絲不亂的頭發(fā)上若锁,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機(jī)與錄音懈万,去河邊找鬼拴清。 笑死靶病,一個胖子當(dāng)著我的面吹牛会通,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娄周,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涕侈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了煤辨?” 一聲冷哼從身側(cè)響起裳涛,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎众辨,沒想到半個月后端三,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹃彻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年郊闯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛛株。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡团赁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谨履,到底是詐尸還是另有隱情欢摄,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布笋粟,位于F島的核電站怀挠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏害捕。R本人自食惡果不足惜绿淋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吨艇。 院中可真熱鬧躬它,春花似錦、人聲如沸东涡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至组贺,卻和暖如春凸舵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背失尖。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工啊奄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掀潮。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓菇夸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仪吧。 傳聞我的和親對象是個殘疾皇子庄新,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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