快速入門node.js

運行node
node ./1.js

let不存在變量提高 


/* const fs = require('fs')
const path = require('path')
fs.readFile(path.join(__dirname, 讀取文件路徑), 'utf8', (err, data) => {})
fs.writeFile(path.join(__dirname, 讀取文件路徑), 寫入的內容, (err, data) => {})
fs.appendFile(path.join(__dirname, 讀取文件路徑), 寫追加的內容, (err, data) => {})
fs.copyFile(要抄的文件路徑, 抄到哪裏, 回調)
fs.stats() */

console.log(path.basename(str)) // 獲取文件名稱的
console.log(path.dirname(str)) // 獲取文件所在的路徑的
console.log(path.extname(str)) // 獲取文件的擴展名


1.9.2. 8.2 安裝和卸載全局包(i5ting_toc)
什麼是全局的包:安裝到計算機全局環境中的包,叫作全局包;安裝的全局包能夠在當前電腦的任何目錄下,直接經過命令行來訪問;
如何安裝全局包:運行 npm install 包名 -g 便可;其中 -g 參數,表示 把包安裝到全局目錄中的意思;
全局包的安裝目錄:C:\Users\用戶目錄\AppData\Roaming\npm
什麼樣的包適合安裝到全局:工具性質的包,適合安裝到全局;
如何卸載全局包:要卸載某個全局的包,直接運行npm uninstall 包名 -g便可;其中 uninstall 表示卸載的意思;
    -g 
    -S (局部開發環境)
    -D(局部環境dev測試環境)

1.下載  npm install 包名 -g   (全局)

一:下載: npm i i5ting_toc -g 
二: 轉換: npm i i5ting_toc -f 文件目錄 -o   (-o下載完畢打開)
三:卸載:npm uninstall 文件目錄 -g

2.安裝局部包

    1.npm init -y               (初始化包配置文件)
    2.npm install jquery -S     (-S 等價於--save)
    3.npm install               (他會去找當前目錄package.json看裏面有什麼,會幫你下載什麼)
    4.npm uninstall 包名 -S   卸載
    5.--sace(-S)
3.解決下載慢問題 cnmp (中國cnmp)
    中國淘寶鏡像 http://npm.taobao.org/
    npm install -g cnpm --registry=https://registry.npm.taobao.org

---------------------------------
自動重啓服務器
-----------------------------------
npm i nodemon -g
1. 使用 nodemon 工具來自動重啓web服務器

- nodemon的做用:可以實時監聽當前項目中,文件的變化;只要監聽到了文件的變化,則 nodemon 工具,會自動從新啓動 web 服務器,從而使最新的代碼生效;免去了程序員手動重啓服務器的困擾;
- 如何安裝:運行 npm i nodemon -g  全局安裝便可;
- 如何使用:
  - 以前使用 node 要執行的文件路徑 來運行 Node.js 代碼;
  - 如今使用 nodemon 要執行的文件路徑 來運行 Node.js 代碼;
- 注意:從此在開發Web項目的時候,推薦使用 nodemon 來啓動 web 服務器

-------------------------------------
express框架的安裝
 express 框架的安裝和基本使用

1. 安裝:運行 npm i express -S 便可安裝
2. 建立基本的 express 服務器:
   - 導入 express 第三方模塊;
   - 建立服務器的實例:調用 const app = express() 方法;
   - 經過 app.get() 或 app.post() 方法,來監聽客戶端的 get 或 post 請求,具體語法:
     - 監聽 GET 請求:app.get('請求地址', (req, res) => { 處理函數 }) 
     - 監聽 POST 請求: app.post('請求地址', (req, res) => { 處理函數 }) 
   - 啓動 express 服務器:經過 app.listen(端口, IP地址, 啓動成功後的回調函數) 啓動服務器;
---------------------------------------------------
 express 中的快捷方法

1. res.send()
   1. 支持 發送 字符串 Content-Type: text/html;
   2. 支持 發送 對象 或 數組 Content-Type: application/json
   3. 支持 發送 Buffer 此時會看成文件下載;
2. res.sendFile()
   - 用法1:res.sendFile(path.join(__dirname, './view/index.html'))
   - 用法2:res.sendFile('./view/movie.html', { root: __dirname })
   - 注意:res.sendFile() 能夠向瀏覽器發送 靜態頁面;
-------------------------------------------
express.static託管資源

若是咱們網站中,有不少靜態資源須要被外界訪問,此時,使用 res.sendFile 就有點力不從心了;

這時候,express 框架,爲咱們提供了 express.static('靜態資源目錄') 

來快速託管指定目錄下的全部靜態資源文件;

1. 語法1: app.use(express.static('public'));
   - app.use()方法,是專門用來註冊 中間件;
   - express.static 是express的內置中間件;
2. 語法2:app.use('/虛擬目錄', express.static('public'))

-------------------------------------------
exppress框架配置模板引擎渲染動態頁面
1. 安裝 ejs 模板引擎npm i ejs -S
2. 使用 app.set() 配置默認的模板引擎 app.set('view engine', 'ejs')
3. 使用 app.set() 配置默認模板頁面的存放路徑 app.set('views', './views')
4. 使用 res.render() 來渲染模板頁面res.render('index.ejs', { 要渲染的數據對象 }),注意,模板頁面的 後綴名,能夠省略不寫!
---------------------------------
npm i express-art-template art-template -S 下載兩個局部包
 須要包:js-tokens   is-keyword-js detect-node
在 express 中配置 art-template

1. 安裝 兩個包 cnpm i art-template express-art-template -S
2. 自定義一個模板引擎  app.engine('自定義模板引擎的名稱', 渲染函數)
3. 將自定義的模板引擎,配置爲 express 的默認模板引擎  app.set('view engine', '具體模板引擎的名稱')
4. 配置 模板頁面得存放路徑 app.set('views', '路徑')
---------------------------------------------------------------------
express框架中提供的路由來分發請求
1.什麼是路由:路由就是對應關係
2.什麼叫作後端路由:前端請求的URL地址,都要有一個後端對應的函數處理
.這種叫作對應關係,就叫作後端路由
3.在Express中,路由的主要職責 就是 把請求分發到對應的處理函數中;
4.在Express中,如何 定義並使用路由呢?

--------------------------
-  // 1. 封裝單獨的 router.js 路由模塊文件
  const express = require('express')
  // 建立路由對象
  const router = express.Router()

  router.get('/', (req, res)=>{})
  router.get('/movie', (req, res)=>{})
  router.get('/about', (req, res)=>{})

  // 導出路由對象
  module.exports = router

------------------------------------
5.express 建立的 app 服務器,如何使用 路由模塊呢?
-----------------------------------
  // 導入本身的路由模塊
  const router = require('./router.js')
  // 使用 app.use() 來註冊路由
  app.use(router)
  -----------------------------

  startWidth、endWidth 兼容  判斷是不是以某一段字符開始

  String.prototype.startWith=function(str){  
  var reg=new RegExp("^"+str);  
  return reg.test(this);  
}  
//測試ok,直接使用str.endWith("abc")方式調用便可  
 String.prototype.endWith=function(str){  
  var reg=new RegExp(str+"$");  
  return reg.test(this);  
}
----------------------------------
什麼是中間件

定義:中間件就是一個處理函數;只不過這個函數比較特殊,包含了三個參數,分別是 req,res,next

注意:中間件方法中的三個參數:

- req:請求對象;
- res:響應對象;
- next:next()能夠被調用,表示調用下一個中間件方法;

4.2 Express 框架中對中間件的5種分類

1. 應用級別的中間件: 掛載到 app 上的中間件 app.get('URL地址', (req, res, next)=> {});
2. 路由級別的中間件: 掛載到 router 對象上的中間件  router.get('url地址', (req, res, next)=>{})
3. 錯誤級別的中間件: 回調函數中,有四個參數 app.use((err, req, res, next)=>{})
4. 惟一內置的中間件: express.static()
5. 第三方中間件: 非express框架提供的,須要程序員手動安裝才能使用的中間件;body-parser 解析post 表單數據

中間件的概念,瞭解便可,由於實際開發中,咱們都直接使用第三方現成的中間件;

中間件就是: 中間處理的過程,這就是中間件

------------------------------------------
用戶模塊的加載機制

- 先查找緩存;
- 若是緩存中沒有則嘗試加載用戶模塊;
- 若是在加載用戶模塊時候省略了後綴名,則:
      首先,嚴格按照指定的名稱去查找
      其次,嘗試加載後綴名是 .js 的文件
      若是沒有.js的文件,則嘗試加載 .json 結尾的文件
      若是沒有 .json 的文件,則嘗試加載 .node 結尾的文件
      查找規則:index  ->  index.js   ->   index.json   ->  index.node
  
第三方模塊的加載機制【瞭解】

1. 先在項目根目錄中查找node_modules文件夾
2. 在node_modules文件夾下,查找模塊相關的文件夾
3. 在對應的文件夾下,查找package.json的文件
4. 查找package.json文件中的main屬性(指定了模塊的入口文件)
5. 若是找到了main屬性,同時,main屬性指定的文件路徑存在,那麼嘗試加載指定的文件模塊
6. 加入沒有main屬性,或者main屬性對應的文件不存在,或者沒有package.json,那麼會依次嘗試加載index.js,index.json,index.node;
7. 若是沒有index相關的文件,或者沒有指定模塊對應文件夾,或者,當前項目根目錄中沒有node_modules文件夾,則向上一層目錄中查找node_modules,查找規則同上!
8. 最後,若是在項目所在磁盤的盤符根目錄中,還找不到對應模塊,則報錯:cannot find module ***
--------------------------------------------------------
express中獲取參數的幾種形式

1. 獲取 http://127.0.0.1:3001/user?id=10&name=zs 中的查詢參數:
   - 直接使用 req.query 獲取參數便可;
   - 注意:URL 地址欄中經過 查詢字符串 傳遞的參數,express 框架會直接解析,你們只須要使用 req.query 直接獲取 URL 中 查詢字符串的參數;
2. 從URL地址中獲取路徑參數:
   - 假設後臺的路由是 app.get('/user/:id/:name', (req, res) => {})
   - 假設客戶端瀏覽器請求的URL地址爲:http://127.0.0.1:3001/user/10/zs
   - 直接使用 req.params 能夠獲取URL地址中傳遞過來的參數;
3. 從post表單中獲取提交的數據:
   - 藉助於body-parser來解析表單數據
   - 安裝:npm i body-parser -S
   - 導入:const bodyParser = require('body-parser')
   - 註冊中間件:app.use(bodyParser.urlencoded({ extended: false }))
   - 使用解析的數據: req.body 來訪問解析出來的數據
Web 開發模式

2.1 混合模式(傳統開發模式)

- 之後端程序員爲主,基本上不須要前端程序員,或者,前端程序員只負責畫頁面、美化樣式、寫JS特效,前端程序員不須要進行數據的交互;
- 這種開發模式,在早些年比較常見;
- 傳統開發模式下,用的最多的是 Jquery + 模板引擎 + Bootstrap
- 後端頁面 .php   .jsp   .aspx   .cshtml

2.2 先後端分離(趨勢)

- 後端負責操做數據庫、給前端暴露接口
- 先後端分離的好處:保證了各個崗位的職責單一;
- 前端負責調用接口,渲染頁面、前端就可使用一些流行的前端框架 Vue, React, Angular

JSONP 和 CORS 的區別

1. JSONP的原理:動態建立script標籤;
   - JSONP發送的不是Ajax請求
   - 不支持 Post 請求;
2. CORS中文意思是跨域資源共享 ,須要服務器端進行 CORS 配置;
   - CORS 發送的是真正的Ajax請求
   - CORS 支持Ajax的跨域
   - 若是要啓用 CORS 跨域資源共享,關鍵在於 服務器端,只要 服務器支持CORS跨域資源共享,則 瀏覽器確定可以正常訪問 這種 CORS 接口;並且,客戶端在 發送 Ajax的時候,就像發送普通AJax同樣,沒有任何代碼上的變化;
3. 對於Node來講,若是想要開啓 CORS 跨域通訊,只須要安裝cors的模塊便可;



------------------------------------------
第三方插件 建立服務鏈接數據庫

//建立核心模塊
const express=require("express");
//調用模塊
const app=express();
//導入mysql 模塊
const mysql=require('mysql');
//鏈接數據庫
const conn=mysql.createConnection({
    host:'localhost',//127.0.0.1
    user:'root',
    password:'root',
    database:'heros'//數據庫名字
});
 //測試接口
app.get('/',(req,res)=>{
    res.send('請求後臺api成功')
})
app.listen(5001,()=>{
    console.log('server running at http://127.0.0.1:5001');
})
---------------------------------
1. 安裝npm install -g gulp
2. npm install semantic-ui --save
3. cd semantic/
4. gulp build
5. 在html中使用`<link rel="stylesheet" type="text/css" href="semantic/dist/semantic.min.css">
   <script src="semantic/dist/semantic.min.js"></script>`

npm 網速很差的時候容易丟包
yarn 相似包的管理工具
'npm i yarn -g' 安裝全局yarn
yarn -v  查看當前是否安裝成功和版本
-----------------------------------解決跨域問題
app.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*')
next()
})
 
 
jsonp的原理是利用scirpt標籤中的src屬性不存在同源限制
jsonp的核心就是後臺返回一個函數的調用,同時並傳入後臺的數據

    跨域使用cors;

(2)、CORS 【Cross-Origin Resource Sharing】
 
 
 
 
 
 
定義和用法:是現代瀏覽器支持跨域資源請求的一種最經常使用的方式。
 
 
​npm cache clean --force 清理緩存
 
 
使用方法:通常須要後端人員在處理請求數據的時候,添加容許跨域的相關操做。以下:
 
 
 
 
res.writeHead(200, {
 
 
 
 
    "Content-Type": "text/html; charset=UTF-8",
 
 
 
 
    "Access-Control-Allow-Origin":'http://localhost',
 
 
 
 
    'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
 
 
 
 
    'Access-Control-Allow-Headers': 'X-Requested-With, Content-Type'
 
 
 
 
});
相關文章
相關標籤/搜索