node基礎應用

node基礎應用

1.概念


>  1.Node.js 基於javascript開發,運行在服務端。
>  2.事件驅動、非阻塞I/O
>  3.基於Google的V8引擎,V8引擎執行Javascript的速度很是快,性能很是好。

2.實操

2.1 安裝 node

> [node 官網](http://nodejs.cn)
> 檢查是否安裝成功
> `node -v /--version`

2.2 簡單使用
> 1. node和瀏覽器同樣能夠執行js文件    cmd 打開命令窗口 在終端輸入 ` node 文件名.js `
> 2. 讀/寫文件(fs)
> 3. 搭建web服務
2.3 客戶端渲染與服務端渲染
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>
2.4 node 核心模塊
  • 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('服務已啓動')
 })
2.5 異步編程

: 要有異步編程的思想 node

  • 回調函數web

    概念:回調函數就是傳遞一個參數化的函數,就是將這個函數做爲一個參數傳到另外一個主函數裏面,當那一個主函數執行完以後,再執行傳進去的做爲參數的函數。走這個過程的參數化的函數 就叫作回調函數。換個說法也就是被做爲參數傳遞到另外一個函數(主函數)的那個函數就叫作 回調函數。

    例子:ajax

    f1()  // f1 是一個很耗時的函數
    f2()
    //從新更改f1的代碼 加一些異步操做
    function f1(callback){
    setTimeout(function(){
    callback()
    },1000);
    //下面是執行f1以前的代碼
    }
    f1(f2)

    應用場景正則表達式

    解決一些異步操做,例如從一個異步中拿到數據。數據庫

  1. function f1(callback)
  2. setTimeout(()=>{ 
  3. for( i = 0; i < 10; i++){ 
  4. callback(i) 

  5. },1000

  6.  
  7. f1(function(data)
  8. console.log(data) 
  9. }) 
  1. promiseexpress

2.6 封裝
概念:所謂封裝,就是把相同的代碼抽離出來封裝成一個盒子(類);
特性:可複用,可維護,代碼邏輯簡潔明瞭

node裏面獨立模塊(包含封裝的概念)

所謂模塊化,也是獨立文件,職責比較單一,有點像是各司其職,各司其責的概念;

任何代碼業務邏輯,一定少不了封裝,你是一個資深工程師,一定少不了封裝


3. express

概念:Express 是一個保持最小規模的靈活的 Node.js Web 應用程序開發框架,爲 Web 和移動應用程序提供一組強大的功。(把原生的http服務給封裝了一下同時又擴展不少功能)
安裝:
`$ npm install express --save`
  1. //引入核心模塊 
  2. var express = require('express'
  3. // 建立服務 
  4. var server = express() 
  5. //監聽路由 
  6. server.get('/login',function(req,res)
  7. req.query  
  8. }) 
  9. // 監聽端口 
  10. server.listen(8000,function()
  11. console.log('開啓服務'
  12. }) 
3.1所包含的幾個核心概念
  1. 監聽路由的方法

  1. get post put delete all 
  1. 匹配路徑的方式

  1. // 字符串、正則 ,字符?,+,*,和() 按正則表達式處理  
  2. // /ab?cd /ab+cd /ab*cd /a/ 
  3. app.get('/about', function (req, res) {  
  4. res.send('about'
  5. }) 

3.響應的方法

  1. //res下表中響應對象()的方法能夠向客戶端發送響應,並終止請求 - 響應週期。若是沒有從路由處理程序調用這些方法,則客戶端請求將保持掛起狀態。 
  2. res.end() //結束響應 
  3. res.json() //發送json 數據 
  4. res.jsonp() //使用jsonp支持發送json格式 
  5. res.redirect() //重定向 
  6. res.render() //渲染視圖模板 
  7. res.send() //發送各類類型的數據 
  8. res.sendFile()//發送文件  
  9. res.sendStatus(404) // 發送狀態碼 
  10. res.sendStatus(200); // equivalent to res.status(200).send('OK') 
  11. res.sendStatus(403); // equivalent to res.status(403).send('Forbidden') 
  12. res.sendStatus(404); // equivalent to res.status(404).send('Not Found') 
  13. res.sendStatus(500); // equivalent to res.status(500).send('Internal Server Error') 
  14. res.set() // 設置請求頭 
  15. res.status(404) // 設置響應的HTTP狀態 
  16. res.type()//將Content-TypeHTTP標頭設置爲由mime.lookup()爲指定的MIME類型肯定的MIME類型 type。若是type包含「/」字符,則將其設置Content-Type爲type。 
  17. res.type('.html'); // => 'text/html' 
  18. res.type('html'); // => 'text/html' 
  19. res.type('json'); // => 'application/json' 
  20. res.type('application/json'); // => 'application/json' 
  21. res.type('png'); // => image/png: 
  1. 路由設計

  1. var router = express.router() 
  2. router.all('/',function(req,res){ }) // get put delete post 
  1. 使用模板引擎

  1. app.set('views', __dirname + '/views');// 設置視圖模板文件夾 
  2. app.set('view engine', 'jade'); 
  3. app.set('view engine', 'pug') //給express 設置對應模板引擎 
  4. app.engine('art', require('express-art-template')); 
  1. 使用靜態資源

  1. app.use( express.static(__dirname + '/static')); // 訪問的是根目錄 ‘/’ 
  2. app.use('/', express.static(__dirname + '/static')); 
  3. app.use('/public', express.static(__dirname + '/public')); 
  1. 案例

相關文章
相關標籤/搜索