node快速入門-02

express 庫

http://www.expressjs.com.cn/

干嘛的:nodejs庫,不用基礎(chǔ)做起,工作簡單化

類似:koa

express特點:

二次封裝,非侵入式,增強形

express搭建服務(wù)

express=require('express')

server=express()

server.listen(端口,地址,回調(diào))

靜態(tài)頁面托管

express.static('./wwww')

server.use(express.static('./wwww'));

接口響應:

各種請求姿勢: get/post/put/delete/....

server.請求姿勢API(地址,處理函數(shù))

server.get(url,(req,res,next)=>{})

server.post(url,(req,res,next)=>{})

....

jsonp請求 == get請求

server.get('/jsonp接口',(req,res,next)=>res.jsonp(json)

設(shè)置回調(diào)函數(shù)的key: server.set('jsonp callback name', '設(shè)定回調(diào)函數(shù)鍵');? 默認callback

參數(shù)接受: req == 請求體

req.query 獲取地址欄的數(shù)據(jù)

? req.body 獲取非地址欄的數(shù)據(jù)? 依賴中間件

? 中間件使用: body-parser? 1. npm install body-parser? 2. require('body-parser')? 3. server.use(中間件())

? req.params 獲取動態(tài)接口名

? req.method 獲取前端提交方式

發(fā)送給瀏覽器: res == 響應體

res.send(any) ~~ res.write + end

JSON: res.json(json)

jsonp: res.jsonp(響應數(shù)據(jù)) 響應數(shù)據(jù)-》jsonp請求時的回調(diào)函數(shù)

404 : res.status(404).send({error:1,msg:"Sorry can't find that!"})

靜態(tài)文件: res.sendFile(path.resolve('public/error.html'))//渲染純 HTML 文件

res.end(any)


后端跳轉(zhuǎn): res.redirect(url)

處理一部分接口 共有業(yè)務(wù)邏輯:

server.all('/admin/*',fn) all匹配全路徑 處理所有HTTP 需要next 延續(xù)后續(xù)

use: 安裝中間件 | 路由

server.use(地址,中間件|路由|函數(shù)體)

中間件(middleware): 不處理業(yè)務(wù),只處理請求? 到? ? 結(jié)束響應? 的中間部分

body-parser

中間件: npmjs.com? 查看使用方式

body-parser 獲取post數(shù)據(jù),限定大小,約定返回數(shù)據(jù)類xx.urlencode({limit:xx})

擴展:

Request 對象 - request 對象表示 HTTP 請求,包含了請求查詢字符串,參數(shù),內(nèi)容,HTTP 頭部等屬性。常見屬性有:

req.app:當callback為外部文件時,用req.app訪問express的實例

req.baseUrl:獲取路由當前安裝的URL路徑

req.cookies:Cookies

req.fresh / req.stale:判斷請求是否還「新鮮」

req.hostname / req.ip:獲取主機名和IP地址

req.originalUrl:獲取原始請求URL

req.path:獲取請求路徑

req.protocol:獲取協(xié)議類型

req.route:獲取當前匹配的路由

req.subdomains:獲取子域名

req.accepts():檢查可接受的請求的文檔類型

req.acceptsCharsets / req.acceptsEncodings / req.acceptsLanguages:返回指定字符集的第一個可接受字符編碼

req.get():獲取指定的HTTP請求頭

req.is():判斷請求頭Content-Type的MIME類型

Response 對象 - response 對象表示 HTTP 響應,即在接收到請求時向客戶端發(fā)送的 HTTP 響應數(shù)據(jù)。常見屬性有:

res.app:同req.app一樣

res.append():追加指定HTTP頭

res.set()在res.append()后將重置之前設(shè)置的頭

res.cookie(name,value [,option]):設(shè)置Cookie

opition: domain / expires / httpOnly / maxAge / path / secure / signed

res.clearCookie():清除Cookie

res.download():傳送指定路徑的文件

res.get():返回指定的HTTP頭

res.location():只設(shè)置響應的Location HTTP頭,不設(shè)置狀態(tài)碼或者close response

res.render(view,[locals],callback):渲染一個view,同時向callback傳遞渲染后的字符串,如果在渲染過程中有錯誤發(fā)生next(err)將會被自動調(diào)用。callback將會被傳入一個可能發(fā)生的錯誤以及渲染后的頁面,這樣就不會自動輸出了。

res.sendFile(path [,options] [,fn]):傳送指定路徑的文件 -會自動根據(jù)文件extension設(shè)定Content-Type

res.set():設(shè)置HTTP頭,傳入object可以一次設(shè)置多個頭

res.status():設(shè)置HTTP狀態(tài)碼

res.type():設(shè)置Content-Type的MIME類型



path 系統(tǒng)模塊

磁盤路徑:

編碼:

windows:? 'c:\\user\\admin\\a.jpg'

mac: ~/desktop/1901

UI:

windows: c:\user\admin

mac: ~/desktop/1901

path.parse('c:\\wamp\\xx.png'); 磁盤路徑(str -> obj)

{

? root: 'c:\\', 盤符

? dir: 'c:\\wamp', 目錄

? base: 'xx.png',? 文件名

? ext: '.png', 擴展名

? name: 'xx' 文件,不含擴展名

}

path.join('磁盤路徑1','磁盤路徑2')

__dirname 魔術(shù)變量? 返回當前文件所在的磁盤路徑

path.dirname == __dirname? 當前文件位置

path.resolve('磁盤路徑1','磁盤路徑n') 合并磁盤片段,右到左找根,左到右拼接,沒有找到根,以當前文件路徑為根

fs模塊:?

文件操作是異步的

fs.rename('當前文件','該后的文件名',(err)=>{});

fs.readFile('當前文件','該后的文件名',(err)=>{});

multer:? 文件上傳

multer->文件名會隨機->fs模塊改名->path系統(tǒng)模塊解析磁盤路徑

文件上傳:前端表單->后端接收到文件本身->保存到服務(wù)器上->給數(shù)據(jù)庫記錄文件一些信息->庫返回給nodejs相關(guān)信息->nodejs返回給前端

前端: <input type=file enctype="multipart/form-data" name="fieldname1"

后端:multer 接受 form-data編碼數(shù)據(jù)

配置

let multer? = require('multer'); 引入

let objMulter = multer({ dest: './upload' }); 實例化? 返回 multer對象

dest: 指定 保存位置(存到服務(wù)器)

app.use(objMulter.any());? any 允許上傳任何文件

req.files 數(shù)組

fieldname: 表單name名

originalname: 上傳的文件名

encoding: 編碼方式

mimetype: 文件類型

buffer: 文件本身

size:尺寸

destination: 保存路徑

filename: 保存后的文件名? 不含后綴

path: 保存磁盤路徑+保存后的文件名 不含后綴

路由(router):? 告訴你去哪

前端:導向 路由 就 告訴瀏覽器應該去哪

后端: 子服務(wù) 一個路由就是一個小的服務(wù)(server/app)

1. 創(chuàng)建路由

router = express.Router();? 返回路由對象

2. 導出路由

module.exports = router;

3. 安裝路由

app.use('地址',router);

router.use('地址'子router) 需要next 延續(xù)

4. 路由處理響應:

router.響應API(地址, 處理函數(shù))

router.get('/',fn)

router.post('/1',fn)

router.all('*',當前router路由下的驗證工作) 需要next 延續(xù)

前后端交互流程

大后端:

用戶發(fā)送請求 - > (http[s]請求) -> web服務(wù)器(收到) - > nodejs處理請求(返回靜態(tài)、動態(tài))->請求數(shù)據(jù)庫服務(wù)(返回結(jié)果)->nodejs(接收)->渲染頁面->瀏覽器(接收頁面,完成最終渲染)

大前端:

前端 - > http[s]請求 -> web服務(wù)器(收到) - > nodejs處理請求(返回靜態(tài)、動態(tài))->請求數(shù)據(jù)庫服務(wù)(返回結(jié)果)->nodejs(接收)->返回給前端(渲染)->瀏覽器(接收頁面,完成最終渲染)

用戶發(fā)送請求: href/backround:url('...')/src/locaction.href/ajax/jsonp/form>action @import(url...)

讀的是資源

靜態(tài): json,font,css,js,img? ? ? ? ?

動態(tài): ajax,form,jsonp,promise? 要求(寫的參數(shù),數(shù)據(jù))

mysql

關(guān)系數(shù)據(jù)庫(二維表(表頭))

數(shù)據(jù)庫:需要安裝服務(wù)端

服務(wù)端:

a) 開啟 mysql服務(wù)

b) 安裝mysql 開啟服務(wù)

庫操作:

客戶端:

軟件操作(UI工具)

wamp的客戶端是phpmyadmin

phpstudy

navicat 收費

系統(tǒng)命令行: mysql 命令行

語言環(huán)境: 安裝對應的客戶端包 包內(nèi)提供api

nodeJs(后臺管理程序),依賴mysql庫

庫操作? 編碼方式 UUC

建|刪 庫(目錄)

建: CREATE DATABASE? `2017-12-6` DEFAULT CHARACTER SET armscii8 COLLATE armscii8_general_ci;

建|刪|改 表(文件)

創(chuàng)建表頭(字段頭)

CREATE TABLE? `2017-12-6`.`user` (

`name` VARCHAR( 32 ) NOT NULL ,

`age` INT( 3 ) NOT NULL ,

`address` VARCHAR( 128 ) NOT NULL

) ENGINE = INNODB

表操作 增刪改查

增:

INSERT INTO 表 (字段列表) VALUES(值列表)

INSERT INTO user (name,age,address) VALUES('蘇菲',38,'')

刪:

DELETE FROM 表 WHERE 字段名=值

DELETE FROM user WHERE name='alex'

改:

UPDATE 表 SET 字段名=值 WHERE 字段名=值

UPDATE user set name='sufei' WHERE name='蘇菲'

查:

SELECT ? FROM 表

SELECT * FROM user? 查所有

mongoDb

下載:https://www.mongodb.com/download-center

安裝:https://www.cnblogs.com/keyi/p/10984514.html

一路下一步

設(shè)置庫 username:root/password:root123

注意:

1)? 測試服務(wù)端是否啟動:

a)理論上服務(wù)器會開機就啟動

手動啟動:

手動啟動服務(wù)端:安裝目錄\Server\4.0\bin\? mongod 回車

b)服務(wù)服務(wù)器:

啟動客戶端 去 訪問 安裝目錄\Server\4.0\bin\? ? mongo 回車

port=27017 默認端口

mongodb://127.0.0.1:27017 協(xié)議+IP+端口

2) 指定數(shù)據(jù)存儲目錄: 需要指定一次? ***

mongod --dbpath c:\data\db? ? db目錄要手動創(chuàng)建

3) 環(huán)境變量:為了在任意盤符下去啟動庫? mongod服務(wù)端|mongo客戶端

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容