1. 程式人生 > >nodejs(6)express學習

nodejs(6)express學習

png 小明 http sendfile turn 友好 分享圖片 htm res

1.簡單認識express

express::一個快速的網站開發框架,封裝了原生的http模塊,用起來更方便;API更人性化

特點

  1. 基於Node.js平臺之上,進一步封裝了 http 模塊,從而提供了更好用,更友好的 API

  2. 使用Express創建網站,比使用原生的http模塊更加方便;

  3. Express 並沒有覆蓋 原生 http 模塊中的方法,而是基於 原生方法之上,做了更友好的封裝,讓用戶體驗更好

創建服務器

技術分享圖片

// npm install express -S
const express = require(‘express‘)

// 創建服務器
const app = express()

// 監聽客戶端的請求 // 只有客戶端的請求類型是 get,並且 請求地址是 / 根路徑的時候, // 才會調用 後面指定的處理函數 app.get(‘/‘, (req, res) => { // express 中,封裝了更好用的 res.send 方法 res.send(‘你好,express 服務器!‘) }) // 監聽客戶端的post請求,並且請求的地址是 /adduser 的時候, // 才會調用後面指定的處理函數 app.post(‘/adduser‘, (req, res) => { res.send(‘服務器處理成功!‘) }) // 啟動服務器 app.listen(4444, () => { console.log(
‘express server running at http://127.0.0.1:4444‘) })

express 中的快捷方法

res.send()

  • 支持 發送 字符串 Content-Type: text/html;

  • 支持 發送 對象 或 數組 Content-Type: application/json

  • 支持 發送 Buffer 此時會當作文件下載;

const fs = require(‘fs‘)
const path = require(‘path‘)
// 導入 express 模塊
const express = require(‘express‘)
// 創建 express 的服務器實例
const app = express() app.get(‘/‘, (req, res) => { // 1.發送普通文本 // res.send(‘你好‘) // 2.發送對象或數組 // res.send({ name: ‘zs‘, age: 30 }) // res.send([‘zs‘, ‘ls‘, ‘zl‘]) // 3.發送Buffer二進制 1. 得到二進制 2. 使用send發送二進制 fs.readFile(path.join(__dirname, ‘./小明.mp3‘), (err, buf) => { if (err) return res.send(‘發送文件失敗!‘) // 發送 Buffer 二進制 res.send(buf) }) }) // 調用 app.listen 方法,指定端口號並啟動web服務器 app.listen(3001, function() { console.log(‘Express server running at http://127.0.0.1:3001‘) })

res.sendFile()

  • 用法1:res.sendFile(path.join(__dirname, ‘./view/index.html‘))

  • 用法2:res.sendFile(‘./view/movie.html‘, { root: __dirname })

  • 註意:res.sendFile() 可以向瀏覽器發送 靜態頁面;

使用res.sendFile發送文件

// 導入 express 模塊
const express = require(‘express‘)
const path = require(‘path‘)
// 創建 express 的服務器實例
const app = express()

app.get(‘/‘, (req, res) => {
  // 向客戶端發送文件
  // sendFile 必須發送絕對路徑,或提供 root 選項
  // res.sendFile(path.join(__dirname, ‘./views/movie.html‘))
  // 或者
  // res.sendFile(‘./views/movie.html‘, { root: __dirname })


  // 實現下載功能,使用sendFIle
  // res.sendFile(path.join(__dirname, ‘./New Divide - J2 Feat_ Avery _ Alita- Battle Angel.mp3‘))
  const filename = encodeURI(‘歌曲.mp3‘)
  res.sendFile(‘./New Divide - J2 Feat_ Avery _ Alita- Battle Angel.mp3‘, { root: __dirname, headers: { ‘Content-Disposition‘: ‘attachment; filename=‘ + filename } })


  
  // res.download(‘./New Divide - J2 Feat_ Avery _ Alita- Battle Angel.mp3‘, ‘aaa.mp3‘, err => {
  //   if (err) return console.log(‘文件下載失敗‘)
  //   console.log(‘文件下載成功‘)
  // })
})

// 調用 app.listen 方法,指定端口號並啟動web服務器
app.listen(3001, function() {
  console.log(‘Express server running at http://127.0.0.1:3001‘)
})

向客戶端發送文件

const express = require(‘express‘)
const path = require(‘path‘)

const app = express()


app.get(‘/‘, (req, res) => {
  // res.sendFile(‘直接傳遞一個絕對路徑‘)
  // res.sendFile(path.join(__dirname, ‘./views/movie.html‘))

  /* const name = encodeURI(‘一首歌曲.flac‘)

  res.sendFile(‘./蘇醒 - Stand Up Again.flac‘, {
    root: __dirname,
    headers: {
      ‘Content-Disposition‘: ‘attachment; filename=‘ + name
    }
  }) */

  res.download(‘./New Divide - J2 Feat_ Avery _ Alita- Battle Angel.mp3‘, ‘Battle.mp3‘, err => {
    if (err) return console.log(‘文件下載失敗!‘)
    console.log(‘下載完成!‘)
  })
})


app.listen(3001, () => {
  console.log(‘server running at http://127.0.0.1:3001‘)
})

點擊下載歌曲

const express = require(‘express‘)

const app = express()

app.get(‘/‘, (req, res) => {
  res.sendFile(‘./music.html‘, { root: __dirname })
})

// 監聽客戶端的下載請求,返回一個具體的文件
app.get(‘/dowload/music‘, (req, res) => {
  res.download(‘./New Divide - J2 Feat_ Avery _ Alita- Battle Angel.mp3‘, ‘Battle Angel.mp3‘, err => {
    if (err) return console.log(‘失敗了!‘)
    console.log(‘ok‘)
  })
})

app.listen(3001, () => {
  console.log(‘server running at http://127.0.0.1:3001‘)
})

music.html

  <a href="/dowload/music">下載音樂</a>

使用express.static快速托管靜態資源

const express = require(‘express‘)

const app = express()

//#region 註釋
/* app.get(‘/‘, (req, res) => {
  res.sendFile(‘./views/home.html‘, { root: __dirname })
})

app.get(‘/movie.html‘, (req, res) => {
  res.sendFile(‘./views/movie.html‘, { root: __dirname })
})

app.get(‘/about.html‘, (req, res) => {
  res.sendFile(‘./views/about.html‘, { root: __dirname })
}) */
//#endregion

// 使用 app.use 來進行相關的配置
// app.use(express.static(‘./views‘))

// 步驟的拆解
const result = express.static(‘./views‘)
app.use(result)
// 再次托管一下樣式表的資源目錄
app.use(‘/css‘, express.static(‘./css‘))
// 托管JS文件目錄
app.use(‘/js‘, express.static(‘./js‘))

// vue 打好的包,直接放在一個文件夾下
// 然後app.use(express.static(‘./views‘))使用就可以了



app.listen(3001, () => {
  console.log(‘server running at http://127.0.0.1:3001‘)
})

nodejs(6)express學習