Node.js初探(一)——fs欢瞪、path、http

1徐裸、準(zhǔn)備工作

(1)瀏覽器中的JS:JS核心語法(ECMAScript)+WebAPI

(2)為什么JS可以在瀏覽器中執(zhí)行遣鼓?

瀏覽器中有JS解析引擎:每個(gè)瀏覽器的解析引擎都不一樣,Chrome瀏覽器中的V8解析引擎最好重贺。

(3)為什么JS可以操作DOM和BOM骑祟?

每個(gè)瀏覽器內(nèi)置了BOM和DOM函數(shù)回懦,瀏覽器中的JS才可以調(diào)用。

(4)瀏覽器中的JS運(yùn)行環(huán)境

運(yùn)行環(huán)境:代碼正常運(yùn)行所需的必要條件次企。瀏覽器也是一個(gè)運(yùn)行環(huán)境怯晕,執(zhí)行JS:V8引擎+內(nèi)置API

內(nèi)置API:由運(yùn)行環(huán)境提供的特殊的接口,只能在所屬的運(yùn)行環(huán)境中被調(diào)用抒巢;包括DOM+BOM+Canvas+XMLHttpRequest+JS內(nèi)置對(duì)象+……

(5)JS可以做后端開發(fā)贫贝,需要借助Node.js

2、初識(shí)Node.js

(1)Node.js中的JavaScript運(yùn)行環(huán)境

  • 瀏覽器是JavaScript的前端運(yùn)行環(huán)境
  • Node.js是JavaScript的后端運(yùn)行環(huán)境
  • Node.js中無法調(diào)用DOM和BOM等瀏覽器內(nèi)置API蛉谜,因?yàn)镹ode.js是一個(gè)單獨(dú)的運(yùn)行環(huán)境

(2)學(xué)習(xí)路徑:JS基礎(chǔ)語法+Node.js內(nèi)置模塊(fs,path,http)+第三方API模塊(express, mysql)

3、在Node.js環(huán)境中執(zhí)行JS代碼

node JS代碼存放路徑

4崇堵、終端中的快捷鍵

?? 上次所執(zhí)行的命令

tab鍵 自動(dòng)補(bǔ)全文件的路徑

ESC鍵 清空當(dāng)前已經(jīng)輸入的命令

cls 清空終端

cd 文件夾X 切換終端到下一層文件夾X

cd.. 切換終端到上一層文件夾

5型诚、fs文件系統(tǒng)模塊(操作文件)

(1)讀取文件內(nèi)容 fs.readFile(path[,options], callback)

path:文件路徑

options:編碼格式

callback(err, dataStr):回調(diào)函數(shù)

  • err:讀取時(shí)的錯(cuò)誤信息

  • dataStr:讀取到的內(nèi)容

// 導(dǎo)入fs模塊
const fs = require('fs')
fs.readFile('./files/1.txt', 'utf8', (err, str) => {
    console.log(err);
    console.log(str);
})

/**
 * 如果文件讀取成功,err=null鸳劳,str=文件內(nèi)容
 * 如果文件讀取失敗狰贯,err=錯(cuò)誤對(duì)象,str=undefined
 */

(2)寫入文件內(nèi)容 fs.writeFile(file, data[,options], callback)

file:文件的存放路徑

data:寫入的文件內(nèi)容

options:編碼格式

callback(err):回調(diào)函數(shù)

const fs = require('fs')

fs.writeFile('./files/2.txt', '0987654321', function(err) {
    console.log(err);
})

/**
 * 1赏廓、默認(rèn)寫入格式為utf8
 * 2涵紊、如果文件不存在,會(huì)創(chuàng)建新的文件并寫入
 * 3幔摸、如果之前文件已存在摸柄,會(huì)使用新內(nèi)容覆蓋舊的內(nèi)容
 * 4、寫入成功:err=null
 *    寫入失敿纫洹:err=錯(cuò)誤對(duì)象
 */

(3)fs路徑動(dòng)態(tài)拼接

在路徑拼接時(shí)驱负,默認(rèn)以終端運(yùn)行的目錄開始拼接,為避免路徑錯(cuò)誤患雇,因此進(jìn)行動(dòng)態(tài)拼接

__dirname:當(dāng)前代碼文件所處的目錄

const fs = require('fs')
// 使用__dirname拼接的路徑是絕對(duì)路徑跃脊,文件在哪里運(yùn)行都可以正確讀取到文件
fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, res) {
    if (err) {
        return console.log(err.message)
    }
    console.log(res);
})
6、path路徑模塊

(1)path.join([...paths])

  • path.join()可以拼接多個(gè)路徑苛吱,../會(huì)抵消一層路徑

  • 使用path.join()拼接路徑時(shí)酪术,如果路徑片段有./,會(huì)自動(dòng)忽略翠储,而使用+進(jìn)行拼接時(shí)绘雁,不能識(shí)別并忽略./

(2)path.basename(path[,ext])

從path文件路徑中,獲取到文件名稱彰亥,如果有ext擴(kuò)展名咧七,則獲取到去掉擴(kuò)展名的文件名稱,擴(kuò)展名要加.

(3)path.extname(path)

獲得路徑path中文件的擴(kuò)展名

7任斋、http模塊:創(chuàng)建web服務(wù)器

(1)服務(wù)器相關(guān)概念

  • IP地址:互聯(lián)網(wǎng)上每臺(tái)計(jì)算機(jī)的唯一地址继阻,每臺(tái)電腦都有自己的IP地址

    • 格式:a.b.c.d a, b, c, d都是0~255之間的十進(jìn)制整數(shù)

    • 自己的電腦也是一臺(tái)服務(wù)器耻涛,IP地址為:127.0.0.1

  • 域名和域名服務(wù)器

    • 域名是字符型的地址方案,IP和域名是一一對(duì)應(yīng)的關(guān)系瘟檩,這種對(duì)應(yīng)關(guān)系存在域名服務(wù)器中

    • 127.0.0.1的域名是:localhost

  • 端口號(hào):每個(gè)Web服務(wù)都對(duì)應(yīng)一個(gè)唯一的端口號(hào)抹缕,客戶端發(fā)送的網(wǎng)絡(luò)請(qǐng)求,通過端口號(hào)墨辛,可以準(zhǔn)確交給對(duì)應(yīng)的Web服務(wù)進(jìn)行處理

    • 每個(gè)端口號(hào)不能同時(shí)被多個(gè)Web服務(wù)占用

    • 在實(shí)際應(yīng)用中卓研,URL中的80端口可以被省略

(2)創(chuàng)建Web服務(wù)器

// 1、導(dǎo)入http模塊
const http = require('http')
// 2睹簇、創(chuàng)建Web服務(wù)器:http.createServer()
const server = http.createServer()
// 3奏赘、為服務(wù)器實(shí)例綁定request事件,監(jiān)聽客戶端發(fā)送的請(qǐng)求:實(shí)例.on()
server.on('request', (req, res) => {
    console.log('Someone visit our web server');
})
// 4磨淌、啟動(dòng)服務(wù)器:實(shí)例.listen()
server.listen(80, function() {
    console.log('Server running at http://127.0.0.1');
})

(3)req請(qǐng)求對(duì)象:可以訪問到與客戶端相關(guān)的數(shù)據(jù)和屬性

(4)res響應(yīng)對(duì)象:可以訪問與服務(wù)器相關(guān)的數(shù)據(jù)或?qū)傩粤褐唬褂胷es.end()進(jìn)行響應(yīng)

const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
    const str = `Your request url is ${req.url}, and request method is ${req.method}`
    res.end(str)
})
server.listen(80, () => {
    console.log('server running at http://127.0.0.1');
})

(5)解決中文亂碼問題

res.setHeader('Content-Type', 'text/html; charset=utf-8')

(6)根據(jù)請(qǐng)求的URL地址搪锣,請(qǐng)求不同的內(nèi)容

const http = require('http')
const server = http.createServer()

server.on('request', (req, res) => {
    // 1构舟、獲取請(qǐng)求的URL地址
    const url = req.url
    // 2佩谷、設(shè)置默認(rèn)的響應(yīng)內(nèi)容
    let content = '<h1>404 Not Found</h1>'
    // 3谐檀、判斷用戶請(qǐng)求的是哪一個(gè)地址
    if (url == '/' || url == '/index.html') {
        content = '<h1>首頁</h1>'
    } else if (url == '/about.html') {
        content = '<h1>關(guān)于</h1>'
    }
    // 4桐猬、設(shè)置響應(yīng)頭溃肪,防止中文亂碼
    res.setHeader('Content-Type', 'text/html;charset=utf-8')
    // 5、使用res.end()把內(nèi)容響應(yīng)給客戶端
    res.end(content)
})

server.listen(80, () => {
    console.log('server running at http://127.0.0.1');
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末羔沙,一起剝皮案震驚了整個(gè)濱河市扼雏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诗充,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異茎匠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)抓狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惭蟋,“玉大人告组,你說我怎么就攤上這事木缝∥业” “怎么了姚建?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵掸冤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我铅匹,道長(zhǎng)饺藤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任崇棠,我火速辦了婚禮,結(jié)果婚禮上枕稀,老公的妹妹穿的比我還像新娘。我一直安慰自己谜嫉,他們只是感情好萎坷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布沐兰。 她就那樣靜靜地躺著,像睡著了一般住闯。 火紅的嫁衣襯著肌膚如雪瓜浸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天比原,我揣著相機(jī)與錄音,去河邊找鬼量窘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锨侯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冬殃,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼囚痴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了造壮?” 一聲冷哼從身側(cè)響起渡讼,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耳璧,沒想到半個(gè)月后成箫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旨枯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年蹬昌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀隔。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡明刷,死狀恐怖婴栽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤轰枝,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站组去,受9級(jí)特大地震影響鞍陨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜从隆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一诚撵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧键闺,春花似錦砾脑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盅藻。三九已至购桑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氏淑,已是汗流浹背勃蜘。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留假残,地道東北人缭贡。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辉懒,于是被迫代替她去往敵國和親阳惹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 一眶俩、學(xué)習(xí)目的和任務(wù) 1. 學(xué)習(xí)目的 了解服務(wù)端編程莹汤; 使用 Express 構(gòu)建 Web 項(xiàng)目; 2. 學(xué)習(xí)任務(wù) ...
    康小曹閱讀 140評(píng)論 0 1
  • 簡(jiǎn)介 ?? Node.js 是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境颠印。Nod...
    GallonLau閱讀 371評(píng)論 0 2
  • 一纲岭、模塊1. 在Node環(huán)境中抹竹,一個(gè).js文件就稱之為一個(gè)模塊(module)。2. 模塊化的優(yōu)點(diǎn):提高代碼的可維...
    YoungEvita閱讀 1,537評(píng)論 0 0
  • Day1 Node.js是什么 1.Node.js is a JavaScript runtime built o...
    恒_e846閱讀 189評(píng)論 0 0
  • js運(yùn)行環(huán)境止潮? 瀏覽器:請(qǐng)求一個(gè)HTTP地址窃判,將一個(gè)url地址封裝成一個(gè)請(qǐng)求報(bào)文,將響應(yīng)報(bào)文解析 瀏覽器中的js可...
    阡陌哥哥閱讀 293評(píng)論 0 1