express 基礎(chǔ)的學(xué)習(xí)

1.什么是express?

Express是基于 Node.js 平臺(tái)万牺,快速怀樟、開放喜庞、極簡的 Web 開發(fā)框架

2.有什么好處呢孟岛?

  • 易上手:nodejs最初就是為了開發(fā)高性能web服務(wù)器而被設(shè)計(jì)出來的,然而相對(duì)底層的API會(huì)讓不少新手望而卻步外遇。express對(duì)web開發(fā)相關(guān)的模塊進(jìn)行了適度的封裝票灰,屏蔽了大量復(fù)雜繁瑣的技術(shù)細(xì)節(jié)簿训,讓開發(fā)者只需要專注于業(yè)務(wù)邏輯的開發(fā)咱娶,極大的降低了入門和學(xué)習(xí)的成本。
  • 高性能:express僅在web應(yīng)用相關(guān)的nodejs模塊上進(jìn)行了適度的封裝和擴(kuò)展强品,較大程度避免了過度封裝導(dǎo)致的性能損耗膘侮。
  • 擴(kuò)展性強(qiáng):基于中間件的開發(fā)模式,使得express應(yīng)用的擴(kuò)展的榛、模塊拆分非常簡單琼了,既靈活,擴(kuò)展性又強(qiáng)夫晌。

3.express怎么用呢雕薪?

  • 1. 安裝

npm install express --save

  • 2 .項(xiàng)目目錄結(jié)構(gòu)

    • 項(xiàng)目目錄清晰很重要,會(huì)使操作變得簡單很多晓淀。
    • express應(yīng)用的核心概念主要包括:路由所袁、中間件、模板引擎
      .
      ├── app.js # 應(yīng)用的主入口
      ├── bin # 啟動(dòng)腳本
      ├── node_modules # 依賴的模塊
      ├──package.json # node模塊的配置文件
      ├── public # 靜態(tài)資源凶掰,如css燥爷、js、img等存放的目錄
      ├── routes # 路由規(guī)則存放的目錄
      └──views# 模板文件存放的目錄

  • 3. 引入express模塊搭建服務(wù)器

const express = require("express"); //引入模塊

(創(chuàng)建服務(wù)器 相當(dāng)于 http.createServer)
const app = express();

當(dāng)服務(wù)器收到 get/post 請(qǐng)求時(shí)  app.get()  相當(dāng)于一次次 判斷
 ( res.end()  send的好處是 能夠自動(dòng)設(shè)置mime類型)

app.get('/',function (req,res) {
    res.send();         
});
app.get('/test',function (req,res) {

});
app.post('/test',function (req,res){

});
//相當(dāng)于http.listen 監(jiān)聽
app.listen(8080,function () {
    console.log("http://localhost:8080");
});

很顯然這比基礎(chǔ)學(xué)習(xí)的node路由判斷懦窘,很多個(gè) if-else 簡單很多前翎,看起來也很明了。
其次不需要判斷資源的加載的類型畅涂,res.send() 能夠自動(dòng)設(shè)置mime類型

  • 4. 資源開放

  • 指定開放目錄
    指定開放的目錄港华,即可訪問此目錄下的所有文件。
    公開目錄的三種方式:
    1.可以訪問此目錄下的文件資源 , 即 http://localhost:3030/static/home.html
    app.use('/static/',express.static('./static')); ---> 用的多

    2.當(dāng)沒有第一個(gè)參數(shù)時(shí)午衰,訪問時(shí)也要?jiǎng)h除第一個(gè)參數(shù) , 即 http://localhost:3030/home.html
    app.use(express.static('./static'));

    3.可以給目錄起別名 即 http://localhost:3030/public/home.html 即 static 的別名是 public
    app.use('/public/',express.static('./static'));

  • 5. 數(shù)據(jù)交互

前端ajax發(fā)送的數(shù)據(jù)可以直接是個(gè)JSON對(duì)象立宜,或者直接發(fā)送個(gè)數(shù)字,字符串臊岸,都可以橙数,無需以字符串形式接收或者發(fā)送數(shù)據(jù),但發(fā)送對(duì)象扇单,后臺(tái)接收的鍵值中 鍵的值是字符串商模。
eg: get請(qǐng)求發(fā)送的id :后臺(tái)接收到的其實(shí)是:{' id ' : ' 1 '} 而不是數(shù)字 1

  • 4.1 get 請(qǐng)求
app.get('/',function (req,res) {
    console.log(req.query);  //得到get請(qǐng)求發(fā)送的數(shù)據(jù)  req.query
    res.send("ok");
});

get 請(qǐng)求的參數(shù)可以直接由 req.query 獲得奠旺,得到的是一個(gè)JSON對(duì)象蜘澜。

  • 4.2 post 請(qǐng)求
    post請(qǐng)求有點(diǎn)復(fù)雜,得引入 第三方包 body-parser
  • 安裝 npm install body-parser
  • 配置
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
  • 引入第三方包 const bodyParser = require('body-parser');

引入第三方包响疚,req也多了一個(gè)屬性鄙信,通過req.body就可得到post請(qǐng)求發(fā)送的數(shù)據(jù),得到的也是一個(gè)JSON對(duì)象

app.post('/',function (req,res) {
   console.log(req.body);
    res.send("ok");
});
  • 4.3 后臺(tái)響應(yīng)數(shù)據(jù)

后臺(tái)響應(yīng)數(shù)據(jù) 通過 res.send()即可,參數(shù)是JSON對(duì)象即可忿晕。

  • 6. 重定向

res.redirect('/');


下面可以看一個(gè)簡單的小demo

后臺(tái) 代碼
let express = require("express");
const bodyParser = require('body-parser');
let app = express();
app.use('/public/',express.static('./public'));  //公開資源目錄
app.use('/views/',express.static('./views')); //公開html文件目錄
let datas = [
   {
       "name":"小仙女",
       "content":"你好哇装诡,我是第一次來到這里"
   },{
       "name":"我的新留言",
       "content":"像夢一樣,像夢一樣自由"
   }];
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
(post 方式)
app.post('/add',function (req,res) {
   let rest = req.body; //得到前臺(tái)post傳過來的數(shù)據(jù)
   datas.unshift(rest); //加入到datas JSON數(shù)組里

   let data = {title:'post方式'};
   res.send(data); //后臺(tái)返回?cái)?shù)據(jù)  
   res.redirect('/'); //重定向

});
(get 方式)
app.get('/add',function (req,res) {
   let rest = req.query; //前臺(tái)get傳過來的數(shù)據(jù)
   datas.unshift(rest); //加入到datas JSON數(shù)組里

   let data = {title:'get方式'};
   res.send(data) ;//后臺(tái)返回?cái)?shù)據(jù) json
   res.redirect('/'); //重定向
});
app.listen(8080,function () {
   console.log("http://localhost:8080");
});


前端 ajax 
$.ajax({
           type:'POST',
           url:'/add',
           dataType:'json',
           data:{
               name:"你好",
               content:"hello,express!"
           },
           success:function (data) {
               console.log(data); //后臺(tái)響應(yīng)的數(shù)據(jù)
               window.location.href ="http://localhost:8080/"; //前端頁面重定向
           }
       })


express的基本使用就是這樣啦,下次會(huì)講深入的使用鸦采。會(huì)更加清晰的講解它的三個(gè)核心概念:路由宾巍、中間件、模板引擎

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渔伯,一起剝皮案震驚了整個(gè)濱河市顶霞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锣吼,老刑警劉巖选浑,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玄叠,居然都是意外死亡古徒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門读恃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隧膘,“玉大人,你說我怎么就攤上這事狐粱∫ㄔⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵肌蜻,是天一觀的道長互墓。 經(jīng)常有香客問我,道長蒋搜,這世上最難降的妖魔是什么篡撵? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮豆挽,結(jié)果婚禮上育谬,老公的妹妹穿的比我還像新娘。我一直安慰自己帮哈,他們只是感情好膛檀,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著娘侍,像睡著了一般咖刃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上憾筏,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天嚎杨,我揣著相機(jī)與錄音,去河邊找鬼氧腰。 笑死枫浙,一個(gè)胖子當(dāng)著我的面吹牛刨肃,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箩帚,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼真友,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了紧帕?” 一聲冷哼從身側(cè)響起锻狗,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焕参,沒想到半個(gè)月后轻纪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叠纷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年刻帚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涩嚣。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崇众,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出航厚,到底是詐尸還是另有隱情顷歌,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布幔睬,位于F島的核電站眯漩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏麻顶。R本人自食惡果不足惜赦抖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辅肾。 院中可真熱鬧队萤,春花似錦、人聲如沸矫钓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽新娜。三九已至赵辕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杯活,已是汗流浹背匆帚。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工熬词, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旁钧,地道東北人吸重。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像歪今,于是被迫代替她去往敵國和親嚎幸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359