Node是基於chrome V8的js運行環境css
去node.js官網下載安裝包安裝便可html
在命令行工具輸入node -v後回車可查看node環境是否安裝成功前端
js是基於ECMAScript語法的,操做BOM和DOMnode
node.js也是基於ECMAScript語法,還有額外的Node APImysql
若是須要不依賴html運行js,只須要在js所在目錄按住shift,右鍵打開命令欄運行linux
node.js內部的變量和方法默認不能被外部訪問,若是a.js內部的方法要被外部(b.js)訪問使用:web
1.在a內使用exports.變量=變量sql
2.在a內使用module.exports.變量=變量chrome
若是同時使用export和module.expore變量,以module.expore爲準數據庫
3.在b內使用require(‘文件名’)訪問
f:即file文件
s:即system系統
./表明本級目錄 ../表明下級目錄
讀取文件
fs.readFile(「文件路徑」,「文件編碼」,回調函數)
文件引用 const fs = require(」fs「);
回調函數內包含(err,doc)
err表明是否出錯,返回null表明沒有出錯,doc爲文件內容
寫入文件
fs.weiteFile(「要寫入的文件名」,「要寫入的內容」,回調函數)
若是沒有要寫入的文件系統會自動建立
path方法
window的路徑基本使用/\
但服務器linux只有/
用戶上傳頭像等是保存到服務器中,因此須要路徑拼接
導入path模塊
const path= require(「path」)
let fin = path.join(「a」,「b」,「c.css」)
結果爲a\b\c.css
在大多數狀況下都會使用絕對路徑
使用--dirname能夠獲取絕對路徑
eg:path.join(__dirname,"路徑")
是多個文件組成的包 npmjs.com有文檔
部分第三方模塊能夠鏈式編寫,即res.status().send()
獲取第三方模塊,使用npm(node packge manager)命令
下載:npm install 模塊名稱(下載到命令行所在目錄)
卸載:npm uninstall 模塊名稱
nodemon是一個第三方輔助執行文件(文件被修改會自動執行)
1.npm install nodemon -g(-g表明全局安裝)
2.使用nodemon代替node執行
3.ctrl+c結束命令
nrm:npm下載地址切換工具
1.npm install -g
2.nrm ls可查看下載地址列表
3.nrm use +地址
gulp第三方模塊前端構建工具
項目上線,html、js、css合併
語法轉換
公共文件抽離
1.npm install gulp
2.在項目根目錄創建gulpfile.js文件
3.建立兩個文件夾,src文件夾放置源代碼,dist文件夾放置壓縮後的文件
4.在gulpfile.js內編寫任務
5.執行gulpfile.js
gulp中的方法(用*能夠獲取全部同類型文件)
gulp.src();獲取要處理的文件
gulp.dest()輸出文件
gulp.task()創建gulp任務
gulp.watch()監控文件變化
eg:const gulp = require("gulp");
gulp.task(first,()=>{
gulp.src("./src/css").pipe(gulp.dest('dist/css'))
]})
gulp插件
gulp-htmlmin壓縮html文件中的代碼
gulp-csso壓縮css
gulp-babel js語法轉化
gulp-less less語法轉化
gulp-uglify 壓縮混淆js
gulp-file-include 公共文件包含
通常網站頭部和尾部會用到,使用@@include(「公共路徑」)能夠引用
browsersync 瀏覽器實時同步
gulp能夠將全部任務封裝起來依次執行eg:gulp.task('default',['htmlmin','cssmin','copy'])
package.json會記錄項目相關信息,包括第三方模塊(在dependencies字段中),快速生成package.json文件可使用 npm install -y
在傳輸時可避免傳遞node-modules模塊(本模塊過大),使用npm install便可下載全部第三模塊
項目在開發階段的依賴稱爲開發依賴,但有些項目依賴在上線以後不須要了,因此在安裝包時,在開發階段須要的依賴以--save-dev命令結尾,此文件會存儲在devDependencies中,若是在服務器線上環境使用--production
url:傳輸協議://IP或域名:端口(默認爲80)/資源所在位置
http超文本傳輸協議
建立web服務器
請求報文
post 發送數據(安全,放在請求體中)
get 請求數據(不安全,經過url傳遞)
req.headers獲取請求報文信息
req.url獲取請求地址
req.method獲取請求方法
res.writeHead(狀態碼,{‘content-type’:文件類型})能夠設置http狀態碼和默認編碼方式
獲取文件type可使用mine插件
url.parse(req.url,true)會解析url的參數(限於get請求)
url.parse().pathname能夠返回無參數的url
querystring能夠處理post請求的字符串
請求什麼響應什麼,網頁的訪問路徑
同步api從上到下執行,異步api會放在棧堆中,等到觸發才執行
異步api須要經過回調函數來調用,沒有返回值,因此須要封裝callback函數
讀取文件是異步API,第二部是回調函數
回調異步解決的方法:將回調函數寫入回調函數中,但會致使過多嵌套,還可使用promise構造函數
eg:let promise = new Promise((resolve,reject)=>{
fs.readFile("./1.txt",''utf8',(err ,result) = >{
if(err!=null){
reject(err)
}else{resolve(result)}
})
})
promise.then((result)=>{
console.log(result);
})
.catch((err)=>{console.log(err)})
若是成功調用resolve,失敗調用reject
es7新增異步函數
在普通函數前加async關鍵字,默認返回promise
eg: anync function fn (){
throw"發生了一些錯誤"
return 123;
}
fn().then(function(data){
console.log(data)
}).catch(function(err){
console.log(err)
})
throw拋出異常,使用catch接收,throw後的代碼不執行
async內部有await方法,能夠暫停函數的執行,只有有返回值才執行
promisify方法能夠改造異步方法好比fs方法,返回一個prominse對象
在調用Promisify方法
eg:const promisify = require("util").promisify
const readFile = promisify(fs.readFile)
在瀏覽器中去全局對象是window,在node中全局對象是gobal
網站的數據是存儲在數據庫中
mongoDB 基於JSON
mysql 用於PHP
第三方模塊mongooes
須要啓動MongoDB net stat MongoDB
增刪改查
使用npm install express命令進行下載
框架特性
提供了簡潔的路由定義
對獲取http請求參數進行簡化處理
對模板引擎支持程度高,方便渲染html
提供了中間件機制有效控制http請求
擁有大量第三方中間件對功能進行擴展
中間件就是一堆方法,能夠接收客戶端發來的請求,也能夠對請求作出響應,也能夠將請求交給下一個中間件處理
中間件由中間件方法(由框架提供),請求處理函數(開發人員提供)
能夠針對同一個請求設置多箇中間件
中間件默認從上到下匹配,匹配成功就終止匹配,可使用next方法將請求的控制權交給下一個中間件
中間件經常使用來作登陸保護,沒有登陸就不調用next方法
還能夠在網站維護時設置中間件,攔截全部路由
能夠自定義404頁面,在全部路由最後定義,表明上面的都沒有匹配,使用res.status設置狀態碼
unique能夠判斷數據是否重複
serializeArray能夠獲取表單中用戶輸入的內容,默認是數組內部有兩個值,一個是name即表單的name,一個是value,即表單的value
第三方模塊bcrypt,單程加密,能夠在密碼中加入隨機字符串增長密碼的破解難度
cookie是服務器在第一次響應客戶端請求的時候存儲在客戶端,在下一次請求服務器時,會自動發送cookie中的儲存數據給服務器端,cooike是有過時時間的
session是一個對象,能夠儲存多條數據 ,每條數據都有對應的sessionid做爲標識,頁面關閉session就失效了