日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

node.js知识点总结

發(fā)布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 node.js知识点总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、當exports對象和module.exports對象指向的不是同一個對象時,以module.exports對象為準。

二、系統(tǒng)模塊

// 1. fs.readFile() 讀取文件 // 語法格式 fs.readFile('包含文件名的文件路徑', ['文件編碼'], callback)// 例子 fs.readFile('./01.helloword.js', 'UTF-8', (err, doc) => {// 如果文件讀取錯誤err,是一個對象,包含錯誤信息// 如果文件讀取正確,err是空// doc是文件讀取的結(jié)果console.log(err)console.log(doc) })// 2. fs.writeFile() 寫入文件內(nèi)容 // 語法格式 fs.writeFile('包含文件名的文件路徑', '要寫入的內(nèi)容', callback)// 例子 fs.writeFile('./demo.txt', '即將要寫入的內(nèi)容', (error) => {// 寫入失敗if (error !== null) return console.log(error)// 寫入成功console.log('寫入成功') });

三、path路徑拼接語法

// 語法: path.join('路徑','路徑',...)// 例子 // public/upload/avator const path = require('path') // 路徑拼接 const finalPath = path.join('public', 'upload', 'avator');

四、相對路徑和絕對路徑

  • 大多數(shù)情況下使用絕對路徑,因為相對路徑有時候相對的是命令行工具的當前工作目錄
  • 在讀取文件或者設(shè)置文件路徑時都會選擇絕對路徑
  • 使用__dirname獲取當前文件所在的絕對路徑
path.join(__dirname, '05.readfile.js')

?五、第三方模塊

1. nodemon是一個命令行工具,用以輔助項目開發(fā)(在Node.js中,每次修改文件都要在命令行工具中重新執(zhí)行該文件,非常繁瑣)。

2. nrm:npm下載地址切換工具(npm默認的下載地址在國外,國內(nèi)下載速度慢)

3. Gulp:基于node平臺開發(fā)的前端構(gòu)建工具。將機械化操作編寫成任務(wù),想要執(zhí)行機械化操作時執(zhí)行一個命令行命令任務(wù)就能自動執(zhí)行了。(用機器代替手工,提高開發(fā)效率)

Gulp的功能:

? ? ? ? 1) 項目上線,HTML、CSS、JS文件壓縮合并

? ? ? ? 2) 語法轉(zhuǎn)換(es6,less)

? ? ? ? 3) 公共文件抽離

? ? ? ? 4) 修改文件瀏覽器自動刷新

Gulp的方法:

? ? ? ? 1) gulp.src()? ? ? ? 獲取任務(wù)要處理的文件

? ? ? ? 2) gulp.pipe()????????

? ? ? ? 2) gulp.dest()? ? ? ? 輸出文件

? ? ? ? 3) gulp.task()? ? ? ? 簡歷gulp任務(wù)

? ? ? ? 4) gulp.watch()? ? ? ? 監(jiān)控文件的變化

六、package.json文件

項目描文件,記錄當前項目信息,例如項目名稱、版本、作者、github地址。

七、web服務(wù)器

1.創(chuàng)建服務(wù)器,get請求

// 用于創(chuàng)建網(wǎng)站服務(wù)器的模塊 const http = require('http'); // 用于處理url地址 const url = require('url'); // app對象就是網(wǎng)站服務(wù)器對象 const app = http.createServer(); // 當客戶端有請求的時候 app.on('request', (req,res) => {// req.method 獲取請求方式// req.url 獲取請求地址// req.headers 獲取請求報文信息// 響應(yīng)報文res.writeHead(200, {'content-type': 'text/html;charset=utf-8'})console.log(req.url)// 1. 要解析的url地址// 2. 將查詢參數(shù)解析成對象形式let { query, pathname } = url.parse(req.url, true);console.log(query.name)if (pathname == '/index' || pathname == '/') {res.end('<h2>歡迎來到首頁</h2>')} else if (pathname == '/list') {res.end('<h2>歡迎來到列表頁</h2>')} else {res.end('not found')}// if (req.method == 'GET') {// res.end('<h2>hello user 歡迎來到首頁</h2>')// // res.end('get')// } else {// res.end('post')// } }); // 監(jiān)聽端口 app.listen(3000) console.log('網(wǎng)站服務(wù)器啟動成功')

2. post請求參數(shù)

? ? ? ? 1)參數(shù)被放置在請求體中進行傳輸

? ? ? ? 2)獲取POST參數(shù)需要使用data事件和end事件

? ? ? ? 3)使用querystring系統(tǒng)模塊將參數(shù)轉(zhuǎn)換為對象格式

// 用于創(chuàng)建網(wǎng)站服務(wù)器的模塊 const http = require('http'); // 處理請求參數(shù)模塊 const querystring = require('querystring'); // app對象就是網(wǎng)站服務(wù)器對象 const app = http.createServer(); // 當客戶端有請求的時候 app.on('request', (req,res) => {// post參數(shù)是通過事件的方式接收的// data 當請求參數(shù)傳遞的時候觸發(fā)data事件// end 當參數(shù)傳遞完成的時候觸發(fā)end事件let postParms = '';req.on('data', (params) => {postParms += params;});req.on('end', () => {console.log(querystring.parse(postParms));});res.end('ok') }); // 監(jiān)聽端口 app.listen(3000) console.log('網(wǎng)站服務(wù)器啟動成功')

3.靜態(tài)資源,動態(tài)資源

const http = require('http'); const app = http.createServer(); const url = require('url'); const path = require('path'); const fs = require('fs'); // 讀取文件類型 const mime = require('mime');app.on('request', (req, res) => {// 獲取用戶請求的路徑let pathname = url.parse(req.url).pathname;pathname = pathname == '/' ? 'index.html' : pathname;let realPath = path.join(__dirname, 'public', pathname);let type = mime.getType(realPath);fs.readFile(realPath, (error, result) => {if (error !== null) { res.writeHead(404, {'content-type': 'text/html;charset=utf8'});res.end('文件讀取失敗')return}res.writeHead(200, {'content-type': type})res.end(result);}); });app.listen(3000) console.log('服務(wù)啟動成功')

八、異步編程

1. Promise? ?解決異步編程得回調(diào)地獄

let promise = new Promise((resolve, reject) => {setTimeout(() => {if (true) {resolve({name: '張三'});} else {reject('失敗了');}}, 2000) }); promise.then(result => {console.log(result) }) promise.catch(error => {console.log(error) })

2. 異步函數(shù)?

異步函數(shù)是異步編程語法的終極解決方案,它可以讓我們將異步代碼攜程同步的形式,讓代碼不再有回調(diào)函數(shù)嵌套,使代碼變得清晰明了。

? ? ? ? anync 關(guān)鍵字

? ? ? ? 1)普通函數(shù)定義前加async關(guān)鍵字,普通函數(shù)變成異步函數(shù)

? ? ? ? 2)異步函數(shù)默認返回promise對象

? ? ? ? 3)在異步函數(shù)內(nèi)部使用return關(guān)鍵字進行結(jié)果返回,結(jié)果會被包裹在promise對象中,return關(guān)鍵字代替了resolve方法

? ? ? ? 4)在異步函數(shù)內(nèi)部使用throw關(guān)鍵字拋出程序異常

? ? ? ? 5)調(diào)用異步函數(shù)再鏈式調(diào)用then方法獲取異步函數(shù)執(zhí)行結(jié)果

? ? ? ? 6)調(diào)用異步函數(shù)再鏈式調(diào)用catch方法獲取異步函數(shù)執(zhí)行的錯誤信息

? ? ? ? await 關(guān)鍵字

? ? ? ? 1)await關(guān)鍵字只能出現(xiàn)在異步函數(shù)中

? ? ? ? 2) await promise, await后面只能寫promise對象,寫其他類型的API是不可以的

? ? ? ? 3)await關(guān)鍵字可以暫停異步函數(shù)向下執(zhí)行,直到promise返回結(jié)果

// 1. 普通函數(shù)定義的前面加上async關(guān)鍵字,普通函數(shù)就變成了異步函數(shù) // 2. 異步函數(shù)默認的返回值是promise對象 // 3. 在異步函數(shù)內(nèi)部使用throw關(guān)鍵字進行錯誤的拋出 // await關(guān)鍵字 // 1. 它只能出現(xiàn)在異步函數(shù)中 // 2. await promise 它可以暫停異步函數(shù)的執(zhí)行,等待promise對象返回結(jié)果后再向下執(zhí)行。async function fn () {throw '出錯了';return 123; }fn().then((data) => {console.log(data) }).catch((error) => {console.log(error) })async function p1 () {return 'p1'; } async function p2 () {return 'p2'; } async function p3 () {return 'p3'; }async function run () {let r1 = await p1()let r2 = await p2()let r3 = await p3()console.log(r1)console.log(r2) console.log(r3) } run()

九、Express編程

express框架提供了方便簡潔的路由定義方式。

express框架對獲取HTTP請求參數(shù)進行了簡化處理。

express對模板引擎支持程度高,方便渲染動態(tài)HTML頁面。

express提供了中間件機制有效控制HTTP請求。

express擁有大量第三方中間件對功能進行擴展

// 引用express框架 const express = require('express'); // 創(chuàng)建網(wǎng)站服務(wù)器 const app = express();app.get('/', (req, res) => {// send()// 1. send方法內(nèi)部會檢測響應(yīng)內(nèi)容的類型// 2. send方法會自動設(shè)置http狀態(tài)碼// 3. send方法會幫助我們自動設(shè)置響應(yīng)的內(nèi)容類型及編碼res.send('hello,express'); })app.get('/list', (req, res) => {res.send({name: '張三', age: 23}); })app.listen(3000); console.log('服務(wù)啟動成功')

1. 中間件

中間件應(yīng)用

? ? ? ? 1)路由保護,客戶端在訪問需要登錄的頁面是,可以先使用中間件判斷用戶登錄狀態(tài),用戶如果未登錄,則攔截請求,直接響應(yīng),禁止用戶進入需要登陸的頁面。

? ? ? ? 2)網(wǎng)站維護公告,在所有路由的最上面定義接收所有請求的中間件,直接為客戶端做出響應(yīng),網(wǎng)站正在維護中。

? ? ? ? 3)自定義404頁面。

總結(jié)

以上是生活随笔為你收集整理的node.js知识点总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国内激情自拍 | 在线免费成人 | 欧美一级无毛 | 日韩欧美精品在线播放 | 亚洲激情偷拍 | 欧美视频黄色 | 国产18页| 欧美在线观看一区 | 无码一区二区三区免费视频 | 欧洲日韩一区二区三区 | 成人免费在线观看av | 亚洲天堂男人av | 成年人免费网站 | www.国产一区二区三区 | 日本高清视频一区二区三区 | 久久精品99久久久久久 | 亚洲色图在线观看 | 国产午夜精品在线 | 91最新地址永久入口 | 就爱啪啪网站 | 波多野结衣在线网址 | 国产精品色在线 | 激情文学8888| 日韩深夜在线 | 日韩女优在线播放 | 成人午夜sm精品久久久久久久 | 中国性猛交 | 久久最新精品 | 黄色在线一区 | 中文字幕一区二区在线观看视频 | 久久综合88 | 97久久国产精品 | 欧美综合第一页 | 污夜影院| 人妻熟女一区二区三区app下载 | 中文字幕在线观看你懂的 | 精品国产乱子伦一区二区 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产白袜脚足j棉袜在线观看 | www.sesehu| 97超碰碰碰 | 国产一区资源 | 91麻豆精品国产91久久久久久久久 | 国产在线第一页 | av天天色 | 欧美熟妇交换久久久久久分类 | 二区在线播放 | 麻豆md0077饥渴少妇 | 粗大的内捧猛烈进出在线视频 | 精品人妻大屁股白浆无码 | 都市激情久久 | 亚洲欧美日韩不卡 | 成人自拍网站 | 一级二级三级视频 | 国产精品无码成人网站视频 | 国产中文字幕精品 | 在线观看黄色大片 | 中文字幕一区二 | 中文字幕在线视频一区二区 | 在线视频一区二区三区 | 女教师三上悠亚ssni-152 | 无码久久精品国产亚洲av影片 | 国产精品视频无码 | 欧美美女网站 | 国产伦精品一区二区三区免费视频 | 欧美三级韩国三级日本三斤 | www.色黄| 强侵犯の奶水授乳羞羞漫虐 | 黄视频在线播放 | 天天舔天天爱 | 精品欧美乱码久久久久久1区2区 | 美女扒开腿让男生捅 | 五十路在线视频 | 91亚洲综合| 天天曰天天 | 午夜伦视频| 国产女人18毛片 | 男人激烈吮乳吃奶爽文 | 国产香蕉9| 嫩草嫩草嫩草嫩草嫩草嫩草 | 婷婷综合影院 | 美美女高清毛片视频免费观看 | 下面一进一出好爽视频 | 亚洲一二三 | 麻豆网站免费观看 | 成人欧美一区二区三区黑人动态图 | 人妻一区二区在线 | 国产精品一区二区黑人巨大 | 精品一二三区久久aaa片 | 日本一区二区三区视频在线播放 | 天天摸夜夜爽 | 亚洲成人777 | hd性videos意大利精品 | 亚洲成人av综合 | 六月综合网 | 国产成人精品视频ⅴa片软件竹菊 | 日韩电影在线一区 | 无码人妻精品一区二区50 | 在线免费观看一区二区三区 |