1. 程式人生 > 其它 >Node.js基礎入門第十天

Node.js基礎入門第十天

經過前面九天的學習,對Node.js開發有了一個初步的認識,今天繼續學習Node.js後端開發框架Express相關內容,僅供學習分享使用,如有不足之處,還請指正。

響應物件(res)

1. 什麼是響應物件?

響應物件(res)是指伺服器端向客戶端響應資料的物件,包含了所有要響應的內容。Express的響應物件是對Node.js原始響應物件的封裝。

2. 響應物件常見方法

響應物件的常見方法,如下所示:

  1. res.send(data)方法,用於向客戶端返回任意型別的資料。但是不能直接返回數字,否則會被當成狀態碼,如果一定要返回,則需要加引號。
  2. res.json()方法,向客戶端返回json資料,且會設定返回的Header為的application/json。
  3. res.render()方法,渲染模板,用於將資料填充到模組中。
  4. res.redirect()方法,實現服務端跳轉。
  5. res.cookie(),設定cookie。
  6. res.set(),設定響應頭

3. res.send方法

返回Json格式的資料,如下所示:

1 router.get('/', function(req, res, next) {
2     var data={"name":"小六公子","age":29};
3     res.send(data);
4 });

在瀏覽器中開啟如下所示:

如果要單獨返回一個數字,需要加引號,轉換成字串,否則會被當成狀態碼,如下所示:

1 router.get('/', function(req, res, next) {
2     //res.send(10);//錯誤
3     res.send("10");//正確
4 });

返回錯誤示例,截圖如下所示:

 

 注意:res.send方法,在一個請求內,是能生效一次,如果連續寫多個,則會丟失且報錯。如下所示:

1 router.get('/', function(req, res, next) {
2     res.send("123");
3     res.send("456");//此內容不會輸出,且後臺會報錯
4 });

在瀏覽器開啟及後臺錯誤,如下所示:

 

 針對這種需要需要傳送多次資料的情況,可以先將資料進行拼接組裝,再統一發送。

4. res.json方法

Express提供了專門的返回json資料的方法,在返回響應資料時,同時設定響應頭。如下所示:

1 router.get('/', function(req, res, next) {
2     var data={"name":"小六公子","age":29};
3     res.json(data);
4 });

在瀏覽器中開啟如下所示:

 

5.  res.render方法

使用者讀取模板,並渲染資料到模板中,然後再發送到客戶端。如下所示:

index.ejs模組檔案如下所示:

 1 <!DOCTYPE html>
 2 <html>
 3   <head>
 4     <title><%= title %></title>
 5     <link rel='stylesheet' href='/stylesheets/style.css' />
 6   </head>
 7   <body>
 8     <h1><%= title %></h1>
 9     <p>Welcome to <%= title %></p>
10     <p>I am <%= name %></p>
11   </body>
12 </html>

渲染如下所示:

1 router.get('/', function(req, res, next) {
2     res.render('index', { title: 'Express' ,name:"小六公子"});
3 });

在瀏覽器中執行,如下所示:

 

6. res.redirect方法

此方法可以實現頁面的後端直接跳轉,且沒有任何提示,如下所示:

1 router.get('/', function(req, res, next) {
2     res.redirect("https://www.baidu.com");//跳轉
3 });

注意:頁面跳轉後,瀏覽器中的網址也會變成跳轉後的新網址。

7. 鏈式呼叫

響應物件的方法可以鏈式呼叫,如下所示:

1 router.get('/', function(req, res, next) {
2     res.status(200).send("小六呀");//先設定狀態碼,再輸出內容
3 });

請求物件(req)

請求物件包含了一次請求中的所有資料(如:請求頭,請求體等)。

1. 獲取GET方式引數

在Express中,獲取GET方式傳遞的引數非常簡便,如下所示:

1 router.get('/', function(req, res, next) {
2     //請求格式:req.query.引數名
3     var name = req.query.name;
4     var age = req.query.age;
5     res.send("姓名:"+name+",年齡:"+age);
6 });

在命令列中執行程式,並在瀏覽器中開啟,如下所示:

2. 獲取POST方式引數

POST方式通過【req.body.引數名】 的方式進行獲取。POST方式一般採用form表單的方式實現。

建立一個靜態網頁login.html,如下所示:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>登入</title>
 6     </head>
 7     <body>
 8         <form method="post" action="/login.html">
 9             姓名:<input type="text" name="name" /> <br />
10             年齡:<input type="text" name="age" /> <br />
11             <input type="submit" value="登入" />
12         </form>
13     </body>
14 </html>

在路由檔案中,獲取引數,並進行返回,如下所示:

1 router.post('/login.html',function(req,res,next){
2     var name = req.body.name;
3     var age = req.body.age;
4     res.send("【POST方式】姓名:"+name+",年齡:"+age);
5 });

在瀏覽器中開啟,如下所示:

注意:第一次開啟form表單是GET方式,第二次響應是POST方式,所以在路由中設定的POST方式響應頁面。在控制檯視窗日誌如下所示:

3. 引數匹配模式

位址列中的引數還可以通過引數匹配的方式進行獲取。匹配地址通過【冒號引數名】的方式,然後通過【req.params.引數名】進行獲取。如下所示:

1 router.get('/list/:id/:name', function(req, res, next) {
2     var id = req.params.id;
3     var name = req.params.name;
4     res.send("傳遞的引數為id:"+id+",name:"+name);
5 });

然後在瀏覽器開啟,如下所示:

 

中介軟體

Express是一個自身功能極簡,完全是由路由和中介軟體構成的一個web開發框架,從本質上來說,一個Express的應用就是在呼叫各種中介軟體。

在Node.js中,中介軟體本質是一個函式,它可以訪問請求物件,響應物件和next尾函式。如果當前中介軟體沒有終結請求-響應迴圈,則必須呼叫next方法將控制權交給下一個中介軟體,否則請求會掛起。

如404時,呼叫建立錯誤方法,如下所示:

1 app.use(function(req, res, next) {
2   next(createError(404));
3 });

備註

走馬川行奉送出師西征 / 走馬川行奉送封大夫出師西征

【作者】岑參 【朝代】唐

君不見走馬川行雪海邊,平沙莽莽黃入天。

輪臺九月風夜吼,一川碎石大如鬥,隨風滿地石亂走。

匈奴草黃馬正肥,金山西見煙塵飛,漢家大將西出師。

將軍金甲夜不脫,半夜軍行戈相撥,風頭如刀面如割。

馬毛帶雪汗氣蒸,五花連錢旋作冰,幕中草檄硯水凝。

虜騎聞之應膽懾,料知短兵不敢接,車師西門佇獻捷。