express簡單總結

express介紹

若有不詳細或者不正確的地方多多指正。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

路由

get請求

路由的使用首先要引入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請求

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就能夠自動重啓。

相關文章
相關標籤/搜索