1. 程式人生 > >node筆記二

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.name,{obj.name}','{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]