若有不詳細或者不正確的地方多多指正。html
咱們能夠拿js與jquery關係來類比一下:node
jQuery是JS在瀏覽器環境下的封裝庫,把DOM操做,ajax等封裝成了兼容性好,方便使用的方法
node是JS的一個非瀏覽器運行平臺,裏面提供API進行web服務器開發,封裝了node關於web的一些APIjquery
二者有相同之處,express和jQuery都是對本身平臺(node,DOM API)進行了封裝
二者有不一樣之處,功能範疇徹底不同。express開發服務器,jquery作瀏覽器端操做。web
express能夠經過官方提供的命令行進行安裝,官方目前默認的界面文件用jade格式,建議修改成pug格式的文件(jade版權問題) ,同時要在package.json中安裝對應的npm包和app.js app.set('view engine', 'pug')
設置對應的界面引擎解釋器。ajax
路由的使用首先要引入express的路由模塊,express官網的一個簡單的get請求路由示例express
var express = require('express'); var app = express(); // respond with "hello world" when a GET request is made to the homepage app.get('/', function(req, res) { res.send('hello world'); });
post請求首先要引入bodyparse中間件,它用於解析客戶端請求中的body中的內容,
使用express應用生成器生成一個網站,它默認已經使用了 bodyParser.json 與 bodyParser.urlencoded 的解析功能,除了這兩個,bodyParser還支持對text、raw的解析。npm
app.use(bodyParser.json())
bodyParser.json是用來解析json數據格式的app.use(bodyParser.urlencoded({ extended: false }))
bodyParser.urlencoded則是用來解析咱們一般的form表單提交的數據,也就是請求頭中包含這樣的信息: Content-Type: application/x-www-form-urlencoded;json
extended:若是設置爲false,那麼對URL-encoded的數據的解析採用querystring庫,若是設置爲true那麼採用qs庫((querystring和qs的不一樣))segmentfault
// home.pug $.ajax({ url:userPath+"/userinfo-company", data:{ module:'user', userId:userId }, type:"POST", success:function(res){ alert(res); }, error:function(error){ console.log(error); } }); // index.js var bodyParser = require('body-parser'); // bodyparser中間件 <!--app.use(bodyParser.json());--> // bodyParser.json是用來解析json數據格式的 <!--app.use(bodyParser.urlencoded({ extended: false })); --> // bodyParser.urlencoded則是用來解析咱們一般的form表單提交的數據,也就是請求頭中包含這樣的信息: Content-Type: application/x-www-form-urlencoded router.post('/userinfo-company', function(req, res, next) { var module = req.body.module; var userid = req.body.userId; request( { url: nodeApi + '/menu/getInfo', method: 'POST', form: { module: module, userId: userid } }, function(error,response,body) { if( response.statusCode == 200 ) { var tempArr = JSON.parse(body); } } ); })
安全性問題後臺沒法讀取到cookie,後面將請求菜單的方法放在了js中,而後在將菜單傳到路由中,經過res.render進行動態渲染瀏覽器
router.post('/menu', function(req, res, next) { menuArr = JSON.parse(req.body.menuArr); res.send('OK'); });
後面發現能夠傳遞cookie,但未在項目中使用
默認狀況下,cookies是禁用的。在defaults或options將jar設爲true,使後續的請求都使用cookie.
var request = request.defaults({jar: true}) request('http://www.google.com', function () { request('http://images.google.com') })
經過建立request.jar()的新實例,可使用定製的cookie,而不是request全局的cookie jar。
var j = request.jar() var request = request.defaults({jar:j}) request('http://www.google.com', function () { request('http://images.google.com') })
或者
var j = request.jar() var cookie = request.cookie('your_cookie_here') j.setCookie(cookie, uri, function (err, cookie){}) request({url: 'http://www.google.com', jar: j}, function () { request('http://images.google.com') })
注意,setCookie至少須要三個參數,最後一個是回調函數。
Express 是一個自身功能極簡,徹底是由路由和中間件構成一個的web開發框架:從本質上來講,一個 Express 應用就是在調用各類中間件。中間件(Middleware)是一個函數,若是當前中間件沒有終結請求-響應循環,則必須調用next()方法將控制權交給下一個中間件,不然請求就會掛起。
中間件分爲:應用級中間件,路由級中間件,錯誤處理中間件,內置中間件,第三方中間件。
上面用的bodyParser是應用級的中間件,router是路由級的中間件,有關中間件更詳細的內容參見express官網(express中間件)
模板引擎前面的縮進要麼是空格或者是tab,若是二者混用會報錯。
express更改路由中的內容的時候必需要重啓本地服務器。只須要全局安裝supervisor,而後命令行supervisor app.js就能夠自動重啓。