express從入門到**的學習旅程

liushaozhuanyong發表於2017-03-25
**node**具有較強的模組化思想,二進位制流處理等都是原始的node所沒有的,這些都是後來通過modules模組擴充套件的。

一個檔案是一個模組,每個模組都有自己的作用域。

++nodejs有自己的模組載入系統require('模組')

express配置與路由   `app.use(function handle(req,res,next){})`

request = {
​    method: 'POST',
​    path: '/yorkie',
​    headers:{
​        'Content-Type':'application/json',
​        ...
​    },
​    ...
}

method HTTP/1.1 狀態碼 OK/Bad Request
[headers請求頭]

{body請求體}

/*
request代表從客戶端接收到的HTTP請求
response代表伺服器端需要響應到客戶端的響應內容
*/

/*require() 用於在當前模組中載入和使用其他模組;此方法是模組的基礎,使用中大概有路徑的概念就行
一個模組的程式碼只會在模組第一次被使用時執行,不會因require多次而被初始化多次。*/
var express = require('express');
/*express() 表示建立express應用程式*/
var app = express();

/*app.get(name);
的作用是獲取設定項name的值*/
/*每個中介軟體(middleware)都有三個引數,req、res和next。
request-----middleware1-----middleware2-----middleware3-------url------reponse
該過程中,如果不呼叫next那麼express不會自動呼叫下一個middleware*/

app.get('/category',function(req,res){
    /*設定狀態碼為200*/
    res.status(200);
    /*設定響應的json報文*/
    res.json({
        python: 20,
        nodejs: 1,
        others: 10
    });
});
var questions = [
    {
        id:1,
        title:'t1',
        asker:'you',
        course: 'nodejs',
        'last-reply':Date.now(),
        reply:1,
        state:'resolved'
    },{
        id:2,
        title:'t2',
        asker:'you',
        course:'nodejs',
        'last-reply':Date.now(),
        reply:1,
        state:'unresolved'
    }
]
app.get('/questions',function(req,res){
    res.status(200);
    res.json(questions);
});
/*可以將第一個引數看作是拼接到當前地址後的url,此處all顧名思義是獲取questions的全部內容*/
app.get('/questions/all',function(req,res){
    res.status(200);
    res.json(questions);
});
app.get('/questions/resolved',function(req,res){
    res.status(200);
    /*array.filter(callback[thisObject])*/
    res.json(questions.filter(function(q){
        return q && q.state === 'resolved';
    }));
});
app.get('/questions/unresolved',function(req,res){
    res.status(200);
    /*array.filter(callback[thisObject])*/
    res.json(questions.filter(function(q){
        return q && q.state === 'unresolved';
    }));
});
/*app.listen() 就是在給定的主機和埠上監聽請求,這個和node中http模組的http.createServer(function(){...}).listen()效果一致*/
app.listen(3000);



相關文章