node.js 學習筆記 05

ejs 的使用

var http = require('http");
var ejs = require("ejs");
var fs = require('fs');
var server = http.createServer(function(req,res){
    fs.readFile('./views/index.ejs',function(err,data){
        //創(chuàng)建模版 html 文件,就是 data
        var indexString = data.toString();
        //設置數(shù)據(jù) 
        var dataDict ={a:6};
        //  使用數(shù)據(jù)渲染
        var html = ejs.render(indexString);
        res.writeHead(200,{'Content-Type':'text/html;charset=UTF8'});
        res.end(html);
    })
})
server.listen(3000,"127.0.0.1");

express 框架

  • express 是一個包身冬,是封裝了 node.js 一些功能的包衅胀,類似jQuery
  • 在使用之前要用 npm install express --save安裝
var express = require('express');
//創(chuàng)建 express 的 app 對象(可以理解為創(chuàng)建服務器)
var app = express();
//接收路由,處理請求
app.get('/',function(req,res){
    //send 可以理解成 end,但是注意 send 在后續(xù)版本中默認設置的有對應的響應頭酥筝,一般表示成功的設置
    res.send('success');
})
//監(jiān)聽的時候可以不設置對應的服務器了滚躯,express 內(nèi)部自己設置了,只設置端口號即可
app.listen(3000);

express 處理參數(shù)

  • 處理一個路由,以/teacher開頭嘿歌,后面拼接對應的 teacher 的 id 號掸掏,我們獲取對應 id 當成參數(shù) express 默認不處理?以及#,使用:來處理參數(shù)
  • 我們可以通過 params 來獲取對應的參數(shù)宙帝,req.params['id']
  • 只要是:我們都可以作為參數(shù)來處理阅束,然后根據(jù)對應的 params 來獲取對應的參數(shù)
var express = require('express');
var app = express();
app.get('./:username/:password',function(req,res){
    res.write(req.params.username);
    res.send(req.params.password);
});
app.listen(3000);

express 處理靜態(tài)資源

  • 使用原生的 node 處理靜態(tài)路徑的時候, 我們需要進行判斷
  • 但是使用 express 處理靜態(tài)路由茄唐,非常方便
var express = require('express');
var app = express();
//我們值需要通過設置對應的需要使用的靜態(tài)路由的文件就可以
//就是給對應的需要使用靜態(tài)資源的文件夾設置靜態(tài)路徑
//use: 表示只要后面設置的路徑可以匹配到息裸,無論是 post 還是別的請求都可以
app.use(express.static('./public'));
app.get('/haha/',function(req,res){
    res.send('haha')
});
app.listen(3000);

render 的使用

var express = require('express');
var app = express():
//在渲染之前我們需要設置用哪個文件蝇更,哪個模版
app.set('view engine','ejs');
//接受請求,渲染界面
app.get('/',function(req,res){
    //渲染頁面一般使用 res
    //res.end 就是表示當對應的響應完成后呼盆,返回給對應的頁面的數(shù)據(jù)年扩,一般情況下返回的是字符串或者 buffer
    //res.send: 和 end 一樣,只是 send 默認多了 響應頭的設置
    //res.render 第一個參數(shù)表示渲染的模版頁面访圃,值需要設置對應的文件就可以厨幻,不需要管理路徑
    //就是說只能去對應的路徑下找對應的模版文件,其他的文件不能渲染,第二個參數(shù)是傳的值
    res.render('index',{a:6})腿时;
});
app.listen(3000);
  • 在 express 中路由設置的時候是不區(qū)分大小寫的
    app.get('/AAa',function(req,res){})

用 render 渲染模版况脆,再用 post 請求發(fā)出參數(shù),接收

var express = require('express');
var app = express();
//使用 ejs 渲染模版
//我們并沒有引入 ejs 這個包
//當我們使用模版進行渲染的時候批糟,可以導入模版格了,系統(tǒng)會自動去對應 node_modules 文件中的對應的包
//只要這個包存在就可以了
app.set('view engine','ejs');
app.get('/',function(req,res){
    //使用 render渲染
    res.render('form');
});
//處理 post 請求
app.post('/',function(req,res){
    res.send('success ---post')
});
app.listen(3000);
  • 原生建立的服務器中的代碼,每次接收到請求就會執(zhí)行一次
var http = require('http');

/*var a = 100,只是在程序運行起來后,調(diào)用一次*/
var a = 100;
//
var server = http.createServer(function (req,res) {
    //這個括號中的代碼,只要接受到請求就會調(diào)用,所以每次刷新一次a會變化
    a ++;
    res.end(a.toString());


})
server.listen(3000,'127.0.0.1');
  • express 包也是如此
var express = require('express');
var app = express();
//在express中,這個代碼也是調(diào)用一次
var a = 100;
//get請求徽鼎,只要接受到請求就會調(diào)用
app.get('/',function (req,res) {
    a++;
    res.send(a.toString());
    
})
app.listen(3000);

路由沖突

var express = require('express');
var app = express();
//當我們使用 express 的時候盛末,會發(fā)現(xiàn)如果我們請求的路由相似,那么第一個接收到的路由可以匹配否淤,其他的不會被匹配
app.get('/',function(req,res){
    console.log(1);
});
app.get('/',function(req,res){
    console.log(2);
});
app.listen(3000);
//打印1

路由的解析過程

var express = require('express');
var app = express();
//路由解析的時候悄但,是從上到下的,就像水流一樣
//所以當匹配到第一個的時候石抡,就會停止匹配
//所以下面這種情況下檐嚣,即使輸出的 url 是 admin 也會答應用戶信息
//處理方法,就是如果想要獲取后面的匹配就將后面的代碼拿到前面
//這種處理方法非常不好啰扛,如果界面很多就很難處理
//所以需要借助一個 next 方法嚎京,讓對應的解析可以繼續(xù)
//但是這個 next 方法屬于回調(diào)函數(shù),應該在形參中定義
app.get('/:username/:password',function(req,res,next){
    res.send('用戶信息')侠讯;
    //這么做的原因就是,程序中暑刃,一般只能有一個 send 和 對應 end 一樣
    // 當我們請求后厢漩,會根據(jù)參數(shù),檢索數(shù)據(jù)庫岩臣,如果有數(shù)據(jù)設置就設置數(shù)據(jù)溜嗜,設置 send 如果沒有就執(zhí)行 next() 使用下一個匹配
    if(有對應的匹配){
        //設置數(shù)據(jù)
        //設置 send
    }else{
        next():
    };
});
app.get('./admin/12345',function(req,res,next){
    // send如果完成后,不能設置響應頭架谎,所以一樣不能設置兩次 send
    res.send('管理信息')炸宵;
});
app.listen(3000);

中間件谷扣,在 node 中就是路由的處理

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末土全,一起剝皮案震驚了整個濱河市捎琐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裹匙,老刑警劉巖瑞凑,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異概页,居然都是意外死亡籽御,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門惰匙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來技掏,“玉大人,你說我怎么就攤上這事项鬼⊙剖幔” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵秃臣,是天一觀的道長涧衙。 經(jīng)常有香客問我,道長奥此,這世上最難降的妖魔是什么弧哎? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮稚虎,結(jié)果婚禮上撤嫩,老公的妹妹穿的比我還像新娘。我一直安慰自己蠢终,他們只是感情好序攘,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寻拂,像睡著了一般程奠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祭钉,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天瞄沙,我揣著相機與錄音,去河邊找鬼慌核。 笑死距境,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的垮卓。 我是一名探鬼主播垫桂,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粟按!你這毒婦竟也來了诬滩?” 一聲冷哼從身側(cè)響起霹粥,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碱呼,沒想到半個月后蒙挑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡愚臀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年忆蚀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姑裂。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡馋袜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舶斧,到底是詐尸還是另有隱情欣鳖,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布茴厉,位于F島的核電站泽台,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏矾缓。R本人自食惡果不足惜怀酷,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗜闻。 院中可真熱鬧蜕依,春花似錦、人聲如沸琉雳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翠肘。三九已至檐束,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間束倍,已是汗流浹背被丧。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肌幽,地道東北人晚碾。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓抓半,卻偏偏與公主長得像喂急,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笛求,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容