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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章