- 創(chuàng)建服務器
var app=require('express').createServer();
app.get('/',function(req,res){
res.send('hello, world from csseer.cml');
});
app.listen(3000); - 創(chuàng)建Https服務器
var app=require('express').createServer({key:...}); 需要傳遞一個對象作為配置參數(shù)迁霎,該對象接收
key,cert和其他在nodejs https文檔參數(shù)
3.生產(chǎn)環(huán)境 (有待學習)
4.______dirname是node.js里面的全局變量截粗,即取得執(zhí)行的js所在的路徑 ,
__filename是目前執(zhí)行的js文件名
5.bodyParser用于解析客戶端請求的body中的內(nèi)容,內(nèi)部使用JSON編碼處理,url編碼處理以及對于文件的上傳處理.
6.中間件盔几, 可以通過connect 傳入express派撕。createServer();
var express =require('express');
var app= express.createServer(
express.logger(),
express.bodyParser()
);
7.路由中間件
這里路徑映射可以理解為路由的意思,路由通過傳入一個或者多個附加的回調(diào)函數(shù)到方法中衷笋。
多重路由中間件可以被按照順序來執(zhí)行巾腕,從而可以實現(xiàn)更復雜的邏輯同蜻。
function andRestrictToSellf(req,res,next){
req.authenticatedUser.id==req.user.id?next():next(new Error('無權(quán)限'));
}
app.get('/user/:id/edit',loadUser,andREstrictToSelf,function(req,res){
res.send('開始編輯用戶'+req.user.name);
})
請記住中間件是簡單的函數(shù)疲扎,返回中間件的函數(shù)
function andRestrictToSellf(role){
return function(req,res,next){ req.authenticatedUser.role==role?next():next(new Error('無權(quán)限
'))};
}
app.del('/user/:id/edit',loadUser,andREstrictToSelf('admin'),function(req,res){
res.send('已經(jīng)刪除'+req.user.name);
})
//app.del的第三個參數(shù)之所以可以這樣寫昵时,是因為其返回的是一個函數(shù),而該函數(shù)可以訪問’admin’的值椒丧,這里涉及到閉包的概念壹甥,
8.session support
可以在Express中通過增加Connect的session中間件來開啟Session支持,當然前提是需要在這之前使用cookieParser中間件壶熏,用于分析和處理req.cookies的cookie數(shù)據(jù)(我們知道session會利用cookie進行通信保持的)句柠。
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
默認session中間件使用Connect綁定的內(nèi)存存儲,但也有另外的實現(xiàn)方式棒假。比如connect-redis就提供了一個Redis的session存儲方案:
var RedisStore = require('connect-redis');
app.use(express.cookieParser());
app.use(express.session({ secret: "CSSer加密字符串", store: new RedisStore }))
req.session 和 req.sessionStore屬性就可以被所有路由及下級中間件所訪問溯职,req.session的屬性會伴隨著每次響應發(fā)送給客戶端,