node快速入門-04

項目經(jīng)驗:

fs.unlinkSync(path)? path 網(wǎng)絡(luò)路徑

multer:

不可做全局中間件使用

reg:

用戶存在時,是否可以拒絕文件

multer 如果單獨使用在reg路由里面

mongodb的id 查詢

let ObjectID = mongodb.ObjectID

_id : ObjectID(id)

密碼加密: bcrypt

加密: var hash = bcrypt.hashSync(用戶傳過來的明文密碼, 加鹽數(shù));

校驗:? bcrypt.compareSync(用戶傳過來的明文密碼, hash); // true|false

https://www.easyapi.com 在線api文檔

大后端渲染:

用戶 - > 地址欄(http[s]請求) -> web服務(wù)器(收到) - > nodejs處理請求(返回靜態(tài)、動態(tài))->請求數(shù)據(jù)庫服務(wù)(返回結(jié)果)->nodejs(接收)->node渲染頁面->瀏覽器(接收頁面,完成最終渲染)

模板引擎:

前端: dom操作 虛擬dom操作 二次渲染,后期多次渲染, 優(yōu)點:局部渲染

? jq/js/angualrJs vue/react/.......? 渲染頁面(數(shù)據(jù)整合到靜態(tài)頁面)

后端:

? 抓取前端靜態(tài)頁面 + 渲染引擎 + 數(shù)據(jù)? 返回data ->? send(data)

? 渲染引擎: jade / ejs / ....

arttemplate? underscore baiduTemplate mustach .......

ejs: 模板渲染是異步的

res.render('html轉(zhuǎn)換的ejs模板',{數(shù)據(jù)})

data == str?

ejs模板 : 后綴名為ejs的html文件

ejs模板語法:

ejs 結(jié)構(gòu)就是html

輸出: <%= 數(shù)據(jù)名|屬性名|變量名 + 表達式 %>

語句: <% 語句 %>? 需要被<%? %>? 包裹

非轉(zhuǎn)義輸出: <%- 數(shù)據(jù)名|變量名? + 表達式 %>

https://www.npmjs.com/package/ejs

代理:

接口文檔: https://www.cnblogs.com/e-cat/p/8656040.html

豆瓣:

hostname:'douban.uieee.com',//主機名

? ? port: 443,//端口

? ? path:'/v2/movie/top250?start=3&count=1',

? ? method:'get'

數(shù)據(jù)代理proxy: request請求 抓取異步數(shù)據(jù)

? options={

? ? hostname:'douban.uieee.com',

? ? port:443,

? ? path:'/v2/movie/top250?count='+req.query.count,

? ? method:'GET'

? };

? 發(fā)送http[s]請求

? http[s].request(配置項,回調(diào)(響應(yīng)對象resHttp)) 返回請求對象reqHttp

? resHttp 響應(yīng)對象

? ? resHttp.statusCode 狀態(tài)碼? 200 OK

? ? resHttp.headers 獲取響應(yīng)頭信息

? ? resHttp.setEncoding('utf-8') 設(shè)置編碼方式

? ? resHttp.on('data/end',fn)? ->send給前端

? });

? reqHttp 請求對象

? reqHttp.on('error',(err)=>{console.log(err)}); 監(jiān)聽請求失敗信息

? reqHttp.end();請求結(jié)束

socket.io

場景:

Web領(lǐng)域的實時推送技術(shù),也被稱作Realtime技術(shù)。這種技術(shù)要達到的目的是讓用戶不需要刷新瀏覽器就可以獲得實時更新。它有著廣泛的應(yīng)用場景,比如在線聊天室、在線客服系統(tǒng)、評論系統(tǒng)、WebIM等。

原理:

雙向通信,前端H5api (WebSocket) + 后端net模塊

API:

cn:

https://www.w3cschool.cn/socket/socket-k49j2eia.html

en:

https://socket.io/

配合express腳手架

修改www:

const SOCKETIO = require('socket.io');//創(chuàng)建socket實例

const io = SOCKETIO.listen(server);//監(jiān)聽http實例,未來3000端口下的http請求,會觸發(fā)socket

module.exports = io;

注意: www 不熱重啟,不檢查

服務(wù)端主動推送到客戶端:

let io = require('../../../bin/www'); require要在需要時再引入

? ? io.emit('mess_type',{data:'服務(wù)端的推送數(shù)據(jù)')//推送

客戶端配置:

html里面引入:

<script src="/socket.io/socket.io.js"></script>

連接服務(wù)器:socket = io('http://localhost:3000');

客戶端訂閱

? ? socket.on('mess_type',(data)=>{

console.log('首頁_客戶端收到',data)

})

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容