express簡單總結

weixin_34253539發表於2018-01-17

express介紹

如有不詳細或者不正確的地方多多指正。

我們可以拿js與jquery關係來類比一下:

jQuery是JS在瀏覽器環境下的封裝庫,把DOM操作,ajax等封裝成了相容性好,方便使用的方法
node是JS的一個非瀏覽器執行平臺,裡面提供API進行web伺服器開發,封裝了node關於web的一些API

兩者有相同之處,express和jQuery都是對自己平臺(node,DOM API)進行了封裝
兩者有不同之處,功能範疇完全不一樣。express開發伺服器,jquery做瀏覽器端操作。

express可以通過官方提供的命令列進行安裝,官方目前預設的介面檔案用jade格式,建議修改為pug格式的檔案(jade版權問題) ,同時要在package.json中安裝對應的npm包和app.js app.set('view engine', 'pug')設定對應的介面引擎直譯器。

路由

get請求

路由的使用首先要引入express的路由模組,express官網的一個簡單的get請求路由示例

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的解析。

app.use(bodyParser.json())bodyParser.json是用來解析json資料格式的
app.use(bodyParser.urlencoded({ extended: false }))bodyParser.urlencoded則是用來解析我們通常的form表單提交的資料,也就是請求頭中包含這樣的資訊: Content-Type: application/x-www-form-urlencoded;

extended:如果設定為false,那麼對URL-encoded的資料的解析採用querystring庫,如果設定為true那麼採用qs庫((querystring和qs的不同))

// 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就可以自動重啟。

相關文章