node筆記二
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]