Express教程01:建立服務器、配置路由

閱讀更多系列文章請訪問個人GitHub博客,示例代碼請訪問這裏

Express介紹

基於 Node.js 平臺,快速、開放、極簡的 Web 開發框架。html

Express的特色是易於入門,並且可使用各類中間件擴展它的功能。node

但因爲Express開發相對較早,主要使用回調函數進行異步操做,沒法使用Async函數,所以原團隊也開發了功能更強大的Koa來解決Express的不足之處。git

不過對於開發人員,Express仍是不可或缺的一項重要技能。github

使用Express建立服務器

示例代碼:/lesson01/server.jsexpress

  1. /lesson01文件夾經過npm init -y初始化項目
  2. 使用npm install express --save安裝Express
  3. 引用Express並建立服務器
const express = require('express')

const server = express()

server.listen(8080)

console.log(`Server started at 8080`)
複製代碼

經常使用路由配置方法

示例代碼:/lesson01/server.jsnpm

一般接收到的請求不止get方法,經常使用的有:json

  1. server.get,處理get請求
  2. server.post,處理post請求
  3. server.use,處理全部方法的請求,它的第一個路由參數能夠不傳,此時表示處理全部接口請求,以下:
server.use('/first', (req, res, next) => {
  console.log('first')
  next()
})
複製代碼

除了這3個方法以外,還有server.put、server.delete等方法,具體能夠查看文檔api

添加路由

示例代碼:/lesson01/server.jsbash

Express自帶了路由功能,不須要引用中間件便可添加路由。服務器

server.get('/first', (req, res, next) => {
  res.send({
    error: 0,
    msg: '請求成功'
  })
})
複製代碼

代碼含義以下:

  1. 建立了一個get請求的路由。
  2. 第一個參數'/first'表示請求的路由名稱。
  3. 第二個參數爲回調函數。
  4. 回調函數傳參req表示請求參數實例。
  5. 回調函數傳參res表示響應參數實例。
  6. next用於觸發下一步操做。
  7. res.send能夠向前臺發送數據,與原生node.js的res.write方法不一樣,它不止能夠發送Buffer、字符串,還能夠直接發送JSON等數據,以下:
res.send(new Buffer('wahoo'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.send(404, 'Sorry, cant find that');
res.send(404);
複製代碼

此時訪問http://localhost:8080/first,便可看到頁面顯示:{"error":0,"msg":"請求成功"}

next方法的使用

示例代碼:/lesson01/server.js

next方法的做用是用於對請求的多級處理,例如:

server.get('/second', (req, res, next) => {
  if (Number(req.query.num) > 10) {
    // 知足條件時,纔可觸發同名的下一個路由。
    next()
  } else {
    res.send({
      error: 1,
      msg: '請輸入大於10的數字'
    })
  }
})

server.get('/second', (req, res, next) => {
  res.send({
    error: 0,
    msg: '輸入成功'
  })
})
複製代碼

代碼含義以下:

  1. 若配置了多個同名路由,代碼會從上到下按順序執行,但若是未調用next方法,執行過程會中斷。
  2. 若是接口傳參爲http://localhost:8080/second?num=8,沒法知足num > 10的條件,則不會執行第二個/second路由回調函數中代碼,直接返回錯誤。
  3. 若是接口傳參爲http://localhost:8080/second?num=80,知足了num > 10的條件,則能夠執行第二個/second路由回調函數中代碼,進行下一步處理。
  4. next方法在處理中間件時十分有用,由於在各級中間件的處理中,能夠經過next方法判斷是否須要執行下一級處理,

next方法傳參

示例代碼:/lesson01/server.js

有時會須要給下一級的處理傳參,只要直接給req實例中添加屬性便可,但請注意不要覆蓋系統默認屬性,以下:

server.get('/second', (req, res, next) => {
  if (Number(req.query.num) > 10) {
    // 知足條件時,纔可觸發同名的下一個路由。
    req.randomNum = Math.floor(Math.random() * 100)
    next()
  } else {
    res.send({
      error: 1,
      msg: '請輸入大於10的數字'
    })
  }
})

server.get('/second', (req, res, next) => {
  res.send({
    error: 0,
    msg: `輸入成功,接收到的隨機數爲${req.randomNum}`
  })
})
複製代碼

訪問http://localhost:8080/second?num=80便可看到前臺打印出的req.randomNum結果。

相關文章
相關標籤/搜索