> 1.Node.js 基於javascript開發,運行在服務端。 > 2.事件驅動、非阻塞I/O > 3.基於Google的V8引擎,V8引擎執行Javascript的速度很是快,性能很是好。
> [node 官網](http://nodejs.cn) > 檢查是否安裝成功 > `node -v /--version`
> 1. node和瀏覽器同樣能夠執行js文件 cmd 打開命令窗口 在終端輸入 ` node 文件名.js ` > 2. 讀/寫文件(fs) > 3. 搭建web服務
2.3.1 什麼是客戶端渲染和服務端(SSR )? 二者本質的區別在於究竟誰來完成html的拼接工做,若是是在服務器端完成的,而後返回給客戶端,就是服務器端渲染,而若是是前端作了更多的工做完成了html的拼接,則就是客戶端渲染。 2.3.2 優勢和缺點 服務端渲染優勢: 1. 瀏覽器打開頁面耗時少。由於後端已經拼接完html和數據,瀏覽器直接解析dom就行。 2. 有利於SEO的優化。 3. 後臺生成靜態文件,對於那些數據變化少的頁面來講,能夠生成緩存片斷,這樣就減小了數據庫查詢時間和渲染時間,直接從緩存獲取便可。 服務端渲染缺點: 1.不利於先後端分離,開發效率慢。 2. 佔用服務器資源增多; 客戶端渲染優勢: 1. 先後端分離,開發效率加快,前端只專一於ui的設計,後端只專一於後端的業務邏輯開發。 2. 用戶體驗增強,能夠作成spa,無刷新獲取數據$ajax 客戶端渲染缺點: 1. 前端頁面渲染時間較長,須要先請求數據再加載頁面。 2. 不利於SEO > <p style="color:red">總結: 如今的頁面都是交叉作的,對於重要信息能夠服務端渲染出來,對於不重要的能夠經過js 獲取數據渲染 </p>
fs(文件系統)javascript
異步地讀取文件的所有內容。
fs.readFile('文件路徑',function(err,data){
if(err) throw err;
console.log(data)
});
異步地寫入文件
fs.writeFile('文件路徑','node 學習','utf8',function(err,data){
});
異步的複製文件
fs.copyFile('源文件.txt', '目標文件.txt', (err) => {
if (err) throw err;
console.log('源文件已拷貝到目標文件');
});
path(路徑)html
返回當前文件的文件名
path.basename('/url/index.html') // 返回 index.html
path.basename('/url/index.html','.html') //返回 index
返回當前文件所在的目錄
path.dirname('/url/index/script.js') //返回 /url/index
返回當前文件的擴展名
path.extname('/url/index/script.js') //返回 .js
將字符串拼接起來 返回文件目錄 路徑
path.join('foo','index','sdfk/sine','aske','..') //返回 foo/index/sdfk/sine
返回一個對象{root,dir,base,ext,name}
path.parse('/home/user/dir/file.txt') //返回 {root:'/',dir:'/home/user/dir',base:'file.txt',ext:'.txt',name:'file'}
將路徑或路徑片斷的序列解析爲絕對路徑
path.resolve('/a','./b','c') //返回 /a/b/c
module(模塊)前端
exports 和 module.exports (暴露)
exports.f = function(){}
module.exports = function(){}
> * __http(服務)__
建立服務器
http.creatServer(function(req,res){}) //返回http.server 實例
.listen(3000,function(){
console.log('開啓服務')
})
響應api
res.statusCode = '404' // 發送狀態碼
res.setHeader('content-type','text/plain') //設置請求頭
res.write('發送的客戶端的內容','utf8',function(err,data){
}) // 響應數據
res.end() //結束響應
簡單案例java
//第一步加載核心模塊 http
var http = require('http')
//第二步 建立http服務
var server = http.createServer();
//第三步 監聽請求的api
server.on('request',function(req,res){
var url = req.url; // 獲取請求的路徑 /
res.setHeader('content-type','text/html;charset=utf-8')
//路由設計
if(url == '/login'){
res.end('登陸頁')
}else if(url == '/register'){
res.end('註冊頁')
}else{
res.end('404頁面')
}
})
// 第四步 監聽路徑 端口號
server.listen(3000,function(){
console.log('服務已啓動')
})
注 : 要有異步編程的思想 node
回調函數web
概念:回調函數就是傳遞一個參數化的函數,就是將這個函數做爲一個參數傳到另外一個主函數裏面,當那一個主函數執行完以後,再執行傳進去的做爲參數的函數。走這個過程的參數化的函數 就叫作回調函數。換個說法也就是被做爲參數傳遞到另外一個函數(主函數)的那個函數就叫作 回調函數。
例子:ajax
f1() // f1 是一個很耗時的函數
f2()
//從新更改f1的代碼 加一些異步操做
function f1(callback){
setTimeout(function(){
callback()
},1000);
//下面是執行f1以前的代碼
}
f1(f2)
應用場景正則表達式
解決一些異步操做,例如從一個異步中拿到數據。數據庫
promiseexpress
概念:所謂封裝,就是把相同的代碼抽離出來封裝成一個盒子(類); 特性:可複用,可維護,代碼邏輯簡潔明瞭 node裏面獨立模塊(包含封裝的概念) 所謂模塊化,也是獨立文件,職責比較單一,有點像是各司其職,各司其責的概念;
任何代碼業務邏輯,一定少不了封裝,你是一個資深工程師,一定少不了封裝
概念:Express 是一個保持最小規模的靈活的 Node.js Web 應用程序開發框架,爲 Web 和移動應用程序提供一組強大的功。(把原生的http服務給封裝了一下同時又擴展不少功能) 安裝: `$ npm install express --save`
監聽路由的方法
匹配路徑的方式
3.響應的方法
路由設計
使用模板引擎
使用靜態資源
案例