node
一 在node中,傳遞值的時候,第一個值一定是err,後面的才判斷是否是數據data
二 接收參數,使用node中自帶的事件接收參數:node中,允許傳遞大容量的數據,它是分批進行參數的接收
在分批接收參數的時候,會頻繁的觸發data事件,在這個事件中每次接收指定大小的數據
var str = ’ ';
//chunk:每次接收到的字符串數據
req.on(‘data’,(chunk)=>{
str = str + chunk
})
//當參數全部接收完畢,會觸發end事件
req.on(‘end’,()=>{
console.log(stt)
})
三 核心模塊queryString 把url上面的序列化字符串,轉換成對象的模式
var queryString = require("queryString ")
var newObj = queryString.parse(str)
四 獲取url上的id的值
location.search(url)獲取url上?以及?後面的參數
核心模塊,專門處理URL
var myurl = require(‘url’);
myurl.parse(req.url,true)
五 arr.forEach((value,index)=>{})
forEach遍歷的時候,value值是原始數組數據的副本,理論上說,修改value數據不會影響數組的元素數據,但是,由於數組中存儲的數據是對象,所以默認情況下value和數組中原始數據指向同一個地址空間,所以使用 . 語法也可以進行數據的修改,但是使用對象重置不能修改原始數據
六 node中的重定向
302 301 狀態碼,可以重定向
res.writeHead(302,{
'Location':'/'
})
express模塊
下載 npm install express --save
一 創建服務器
var express = require("express")
var app = express()
app.listen(3001,()=>{})
路由配置
app.get('/',(req,res)=>{
res.end('hell world')
})
關於路由模塊
//創建路由模塊
var express = require("express")
//在這個模塊上可以掛載多個路由配置
var router = express.Router();
//掛載路由配置
router.get('/',(req,res)=>{
res.end('hell world')
})
使用路由模塊—注入路由
注入之後,當有用戶請求的時候,就會調用router模塊進行處理
app.use(router)
二 express 加載靜態資源
託管靜態資源
方法一:app.use(express.static('自己指定的文件夾'))
app.use(express.static('public'))
方法二:要爲函數提供的文件創建虛擬路徑前綴(文件系統中不存在路徑),請爲靜態目錄知道安裝路徑
app.use('/images/,express.static('images'))
數據庫
data.json缺點
1 數據存取不方便,不利於維護和擴展,當數據量大了之後,無法直接通過打開文件的形式對數據進行操作
2 數據存儲比較分賽,無法進行集中式管理
3 安全性較低,由於數據是直接存儲在文本文件中,所有無法進行數據的加密,存在安全隱患
mysql
增加
INSERT INTO 表名(字段列表) VALUES(值列表)
表名後面也可以不指定字段名稱,如果沒有指定,則需要對錶中的所有字段添加數據
值列表需要和字段列表有三個對應
數量對應 順序對應 類型對應
在添加的時候,日期值一定要給單引號
刪除
一定要考慮是否有條件
delete from 表名 where 條件(not and or)
修改
update 表名 set 字段 = 新值 ,字段=新值 。。。。where 條件
查詢
select from where roder by
inner join left join right join
使用mysql
一 代碼選擇數據庫
use 表名
npm i mysql
引入mysql模塊
var mysql = require('mysql')
二 創建數據爲時鏈接
createConnection方法可以創建數據庫鏈接,這個方法需要傳二 入鏈接配置參數,它是一個對象
var connection = mysql.createConnection({
host:'locahost',
user:'root',
password:'root',
database:'mybase'
})
三 打開鏈接
connection.connect()
四 執行mysql命令
var sql = 'insert into heros value(null,‘rose’,‘女’,‘4.jgp’,‘defalt’)
第一個參數:你需要執行的sql命令
第二個參數是一個回調,回調有三個參數
err:錯誤信息
result:操作結構,查詢的操作結果是結果集,增刪改的操作結果是受影響行數
fields:如果是增刪改,那麼返回undefined,如果是查詢則返回當前查詢出的字段的相關信息
connection.query(sql,(err,resule,fields)=>{
if(err){
console.log(err)
}else{
console.log(result)
console.log(fields)
}
})
五 關於佔位符配合mysql的使用
ES6中的模板字符串 `` esc下面那個鍵,它能實現文本換行,同時還能實現解析包含早反引號中的變量
var sql = insert into heros values(null ,’{obj.img}’,’${obj.gender}’,default)
插入
sql 中的?是佔位符
var sql = insert into heros values(null,?,?,?,default)
佔位符使用,那麼第二個參數是佔位對應的數據,它是一個數組,數組中的數據與佔位符一一對應(順序和數量及類型)
connection.query(sql,[obj.name,obj.gender,obj.img],(err,resule,fields)=>{
if(err){
console.log(err)
}else{
console.log(result)
console.log(fields)
}
})
更新
var sql = `update heros set ?where id=?`
connection.query(sql,[ob,obj.id],(err,resule,fields)=>{
if(err){
console.log(err)
}else{
console.log(result)
console.log(fields)
}
})
新增
var sql = insert into heros (name,)
express裏面的模板
一 渲染模板
render()可以實現渲染操作:結合模板和數據,生成動態結構,同時它還會降渲染的結構返回
這個方法的執行,需要你自己來指定使用哪種模板引擎如果你沒有設置,那麼它就不知道如何處理
所以,使用這個方法需要預選告訴app你想使用的模板引擎
res.render(__diename+'/views/index.html',data)
二 指定模板引擎,在中間件的方法中使用
加載指定模板引擎,通過中間件的方式來指定
engine用來指定你想使用的模板引擎:express-art-template
app.engine('art',require('express-art-template'))
art指的是模板的擴展名
設置這個模板引擎所使用的環境變量,下面這個設置說明這個模板引擎在產品階段都需要使用
app.set('view options',{
debug:process.env.NODE_ENV !== ‘production’
})
在express中使用EJS
模板的輸出是<%%> <%= %> <%- %>
一 創建服務器
二渲染
app.get('/',(req,res)=>{
res.render(__dirname+"/views/text.html",{name:'jack',age:'20'})
})
通過中間件去指定渲染時的模板引擎
var ejs = require(‘ejs’)
app.set(‘view engins’,‘ejs’)//模板引擎爲ejs
配置,當擴展名爲html的時候調用ejs進行渲染
app.engine(’.html’,require(‘ejs’).readerFile)
關於正則
學習正則就是學習它的元字符
佔位符:\w \W \s \S \d \D [] .
修飾符: *:修飾前面的字符出現任意次
?:修飾前面的字符出現0次或1次
+:修飾前面的字符出現1次或者多次
{n}:修飾前面字符出現n次
{n,m}:修飾前面字符最少出現n次,最多出現M次
{n,}:修飾前面字符最少出現n次,最多無限制
其他:^ $ 以什麼開頭,以什麼結尾 ()
在node中
一 返回結果給首頁
res.json()
可以將對象轉換成json格式的字符傳並返回
二 獲取post傳遞過來的數據 body-parser
安裝
npm i body-parser
//引入
var bodyParser = require('body-parser')
var A = bodyParser.json()
var B = bodyParser .urlencoded({extended:false})
app.use(A)
app.use(B)
獲取到的數據在 req.body 裏面
Express — session
重定向:
res.redirect('/')
關於php中的session_start()的問題
在php的時候,如果想使用Session,就必須先添加一句代碼:session_start()
原因:是因爲這句代碼一共幹了下面幾個事件
1.隨機的生成一個session_id
2.根據這個id號在指定的位置動態的創建一個文件,文件名以sess_id命名
3.以Set-cookie的方式返回這個id
告訴我們一個道理:就是服務器並不會默認的開啓session處理,如果你想使用session,你得告訴服務器,session_start
一 實現狀態保持,可以使用express-session
1 下載
npm i express-session
2 引入
var session = require('express-session')
3 使用
取值和賦值都是使用req.session,它是一個對象
req.session.isLogin = 'true'
4 配置
app.use(session({
secret:"aaa",//俗稱加鹽。二次加密
resave:"false",//每次請求的時候重新存儲session數據
saveUninitialized"false//無論你是否使用session,都默認給你分配一把鑰匙
}))
express—導航守衛
導航守衛:在進行路徑跳轉的時候,進行判斷如果滿足要求則跳轉,否則則不跳轉
app.use((req,res,next)=>{
console.log('經過了這個中間件')
next()//如果沒有next調用,那麼請求到此爲止
})
在node中設置cookie值
通過響應頭寫入
設置有效時間
var ex = new Date(Date.now() + 10*1000).toUTCString()//把正常的東八區的時間變爲GMT時間
fs.writeHead({
‘Set-Cookie’:'isLogin=true'//單個值的寫法
‘Set-Cookie’:['isLogin=true;expires='+ex,'isLogin=true']//多值寫法
//多值寫法應對設置每個值的有效期時間,有效期必須基於當前時間基礎之上進行設置
})
在node-express中的跨域
客戶端:jsonp
服務端: CORS
設置允許跨域
//設置跨域訪問
app.all(’’, function(req, res, next) {
-
res.header(“Access-Control-Allow-Origin”, “*”);
res.header(“Access-Control-Allow-Headers”, “X-Requested-With”);
res.header(“Access-Control-Allow-Methods”,“PUT,POST,GET,DELETE,OPTIONS”);res.header("X-Powered-By",' 3.2.1') res.header("Content-Type", "application/json;charset=utf-8"); next();
});
關於ES6的新語法
一 反引號
1 可以創建多行文本
var str = `` //在反引號裏面添加代碼
2 可以解析變量
二 定義變量的幾種方式
瞭解 var let const 的使用方式
1 var:沒有作用域 變量聲明會提升
var age=20
2 let:沒有所謂的變量名提升 有作用域:作用域就是從這個變量開始,到這個變量所在的}結束
3 const:定義常量:常量一旦賦值則不能更改
三 解構
解構:就是提取對象或對象中的成員數據的另一種方式
寫法一
var arr = [1,3,5,7,9]
var [a,b,c] = arr
console.log(a,b,c)//1 3 5
寫法二
var obj = {
name:'jsck'
}
// :後面的是重命名
var [name:mingzi] = obj
console.log(mingzi)//jsck
寫法三
var obj = {
name:'jsck',
computer:{
name:‘小米’
}
}
var {computer:{name}}=obj
console.log(name)//小米
總結:如果是對象的解構,必須適應{},吐過是數組的解構,必須是適應[]
四 展開運算符
var arr = [1,2,3]
var arr2 = [a,b,c]
var arr3 = [1,2,3,...arr2]//[1,2,3,a,b,c]