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');
})