国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用前端的語言寫后端——Node.js之Express

這篇具有很好參考價值的文章主要介紹了用前端的語言寫后端——Node.js之Express。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Express

Express 是一種流行的模型視圖控制器(MVC)Node.js框架,具有快速、極簡和靈活的優(yōu)點,為Web和移動應(yīng)用程序開發(fā)提供了強大的功能集合。

最受歡迎的Node.js框架!

安裝Express

  1. 安裝Node.js(你肯定已經(jīng)安裝好了Node.js,這點我們無需多言)

  2. 為你的應(yīng)用創(chuàng)建一個目錄,進入此目錄并以此目錄為你當前的工作目錄:

    $ mkdir myapp
    $ cd myapp
    
  3. 通過npm init為你的應(yīng)用創(chuàng)建一個package.json文件

  4. 接下來終端會讓你輸入一些package.json中的幾個參數(shù),推薦按回車默認即可,但有一個需要注意:

    entry point: (index.js)
    

    這個表示當前應(yīng)用的入口文件,你可以根據(jù)自己的個人習(xí)慣進行適當?shù)男薷模ɡ纾?code>app.js)

  5. myapp目錄下安裝Express并將其保存至依賴列表中:

    $ npm install express --save
    
  6. (不常用)如果臨時安裝express,不需要將其添加至依賴列表中:

    $ npm install express --no-save
    

HelloWorld

app.js文件中編寫如下代碼:

const express = require('express')
const app = express()
const port = 8080

app.get('/', (req, res) => {
  res.send('Hello World!')
})

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})

執(zhí)行命令啟動Web服務(wù)器:

$ node app.js

終端輸出Example app listening on port 8080即為開啟成功

打開瀏覽器訪問localhost:8080,瀏覽器主頁面顯示Hello World!

那么恭喜你!Express 在向你招手!

路由

路由指的是確定應(yīng)用程序如何響應(yīng)客戶機對特定端點的請求,該端點是URI(或路徑)和特定的HTTP請求方法。

路由定義采取以下結(jié)構(gòu):

app.METHOD(PATH, HANDLER)
  • app是 的一個實例express。
  • METHOD是HTTP 請求方法,小寫。
  • PATH是服務(wù)器上的路徑。
  • HANDLER是路由匹配時執(zhí)行的函數(shù)。

讓我們舉一個小例子(默認你已經(jīng)引用了express方法):

app.get('/', () => {
    res.send('Hello World!')
})

中間件

中間件函數(shù)是可以訪問請求對象 ( req)、響應(yīng)對象( res) 以及next應(yīng)用程序請求-響應(yīng)周期中的函數(shù)的函數(shù)。該next函數(shù)是 Express 路由器中的一個函數(shù),當被調(diào)用時,它會執(zhí)行當前中間件之后的中間件。

中間件功能可以執(zhí)行以下任務(wù):

  • 執(zhí)行任意代碼。
  • 更改請求和響應(yīng)對象。
  • 結(jié)束請求-響應(yīng)周期。
  • 調(diào)用堆棧中的下一個中間件。

從 Express 5 開始,返回 Promise 的中間件函數(shù)將next(value)在拒絕或拋出錯誤時調(diào)用。next將使用拒絕的值或拋出的錯誤來調(diào)用。

全局中間件

全局中間件是指在應(yīng)用程序中的所有路由中都會執(zhí)行的中間件函數(shù)。這些中間件函數(shù)可以處理請求對象 (req) 和響應(yīng)對象 (res),以及調(diào)用 next() 函數(shù)將控制權(quán)傳遞給下一個中間件或路由處理程序。

全局中間件通常通過 app.use() 方法添加到 Express 應(yīng)用程序中。例如:

const express = require('express')
const app = express()

// 全局中間件示例1
app.use((req, res, next) => {
  console.log('This is a global middleware')
  //給req添加一個屬性
  req.requestTime = Date.now()
  next()
})

// 路由處理程序
app.get('/', (req, res) => {
  res.send('Hello World!')
})

無論用戶請求的是什么路徑,都會首先執(zhí)行該中間件函數(shù)。

應(yīng)用中間件

應(yīng)用級中間件可以選擇性地應(yīng)用于特定的路由或路由組。

const express = require('express')
const app = express()

// 應(yīng)用級中間件示例
const authenticate = function(req, res, next) {
    // 檢查用戶是否經(jīng)過身份驗證
    const isAuthenticated = true; // 這里應(yīng)該是根據(jù)你的實際邏輯來判斷用戶是否已經(jīng)身份驗證
    if (isAuthenticated) {
        // 用戶已經(jīng)通過身份驗證,繼續(xù)下一個中間件或路由處理程序
        next()
    } else {
        // 用戶未通過身份驗證,返回未經(jīng)授權(quán)的消息
        res.status(401).send('Unauthorized')
    }
}

// 將中間件應(yīng)用于特定路由
app.get('/secured', authenticate, (req, res) => {
    res.send('This is a secured route')
})

// 不受中間件保護的路由
app.get('/public', (req, res) => {
    res.send('This is a public route')
})

在這個示例中,authenticate 函數(shù)是一個應(yīng)用級中間件,它會檢查用戶是否經(jīng)過身份驗證。在 /secured 路由上,通過使用 authenticate 中間件,我們確保只有通過身份驗證的用戶才能訪問該路由。

而對于 /public 路由,沒有任何中間件,因此對所有用戶都是公開可訪問的。

開放跨域請求

cv在你的程序即可,沒什么好解釋的哈哈

app.use(function (req, res, next) {
  //設(shè)置允許跨域的域名,*代表允許任意域名跨域
  res.header("Access-Control-Allow-Origin", "*")
  //允許的header類型
  res.header("Access-Control-Allow-Headers", "content-type")
  //跨域允許的請求方式
  res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS")
  if (req.method == "OPTIONS") res.sendStatus(200) //讓options嘗試請求快速結(jié)束
  else next()
})

幾種常用的Express內(nèi)置中間件函數(shù)

1. JSON格式數(shù)據(jù)中間件函數(shù)

express.json

通常情況下,當客戶端發(fā)送 JSON 格式的數(shù)據(jù)到 Express 服務(wù)器時,我們需要使用 express.json() 中間件來解析這些數(shù)據(jù)。例如:

const express = require('express')
const app = express()

// 使用 express.json() 中間件來解析 JSON 數(shù)據(jù)
app.use(express.json())

// POST 請求示例
app.post('/api/data', (req, res) => {
  console.log(req.body); // 訪問 JSON 數(shù)據(jù)
  // 處理請求
})
2. 靜態(tài)文件中間件函數(shù)

express.static()

通過使用這個中間件,你可以將指定目錄下的靜態(tài)文件(如圖像文件、JavaScript 文件、文本文件等)映射到一個 URL 路徑上,使得客戶端可以直接訪問這些靜態(tài)文件。例如:

const express = require('express')
const app = express()
// 通常和path一起使用比較方便
const path = require('path')

// 通過path的方法獲取到存放靜態(tài)資源的相對路徑
app.use(express.static(path.join(__dirname, 'public')))
3. 路由中間件函數(shù)

(注意:與上面所述路由含義不同,要加強辨析)

express.Router()

  • 使用 express.Router() 可以創(chuàng)建一個新的路由對象,并向其添加路由處理程序。然后,你可以將這個路由對象掛載到你的 Express 應(yīng)用程序的特定路徑上,使得這些路由處理程序只會對與該路徑匹配的請求進行處理。

  • 它允許你將路由處理程序組織成模塊化的方式,以便更好地管理和維護你的 Express 應(yīng)用程序。

首先我們需要創(chuàng)建一個路由模塊,例如:

// routers/testRouter.js
const express = require("express")
let router = express.Router()

// 定義路由處理程序
router.get('/', (req, res) => {
  res.send('Test')
})

// 導(dǎo)出路由對象
module.exports = router

接下來,我們可以將這個路由模塊掛載到 Express 應(yīng)用程序中:

// app.js(初始入口)
const express = require('express')
const app = express()

// 導(dǎo)入用戶路由模塊
const userRouter = require('./routes/user')

// 將用戶路由模塊掛載到指定路徑上
app.use('/test', userRouter)

當客戶端發(fā)出 /test、/test/config 這些路徑的請求時,Express 將會調(diào)用 testRouter 中定義的路由處理程序來處理這些請求。

文件上傳與下載

文件上傳

我們需要使用 Node.js 中間件:multer,附上github的官方multer中文文檔。

我下面將分享一些常用的方法。

  1. 安裝multer:
$ npm install multer
  1. 使用指定臨時存儲目錄,例如:
const express = require('express')
const multer = require('multer')

const upload = multer({
  // 上傳臨時存放在此目錄
  dest: "./public/uploads/temp",
})
//所有接口都允許有上傳功能
app.use(upload.any())

(說明一下為什么指定臨時存儲目錄:當上傳文件時,Multer 將會把文件暫存到指定的臨時目錄中,然后你可以在路由處理程序中獲取到文件并進行相應(yīng)的處理。這種方式適合對文件的存儲方式?jīng)]有特別要求的情況,簡單方便。)

  1. 上傳接口,例如:
app.post("/upload", (req, res) => {
  //檢測是否有文件
  if (!req.files) {
    res.send({
      code: 400,
      msg: "上傳文件不能為空",
    })
    return
  }
  
  //保存文件
  let files = req.files
  let ret_files = []
  for (let file of files) {
    //獲取名字后綴
    let file_ext = file.originalname.substring(file.originalname.lastIndexOf(".") + 1)
    //使用時間戳作為文件名字
    let file_name = new Date().getTime() + "." + file_ext
    // 移動文件并且修改文件名字
    fs.renameSync(
      // 因為multer生成臨時文件的問題,file.filename會是亂碼
      process.cwd() + "/public/upload/temp/" + file.filename,
      process.cwd() + "/public/upload/" + file_name
    )
    // 將上傳成功的文件路徑添加到返回數(shù)組中
    ret_files.push("/public/upload/" + file_name)
  }

  // 返回上傳成功的響應(yīng)
  res.send({
    code: 200,
    msg: "ok",
    data: ret_files,
  })
}

上述let files = req.files的文件信息包括:

  • fieldname:字段名,即表單中文件上傳字段的名稱。
  • originalname:原始文件名,即客戶端上傳的文件的原始名稱。
  • encoding:文件編碼,即文件的編碼方式。
  • mimetype:文件的 MIME 類型,即文件的媒體類型。
  • destination:文件的存儲目錄,即文件上傳后存儲的目錄路徑。
  • filename:文件名,即文件在存儲目錄中的名稱。
  • path:文件路徑,即文件在服務(wù)器中的絕對路徑。
  • size:文件大小,即文件的字節(jié)數(shù)。

補充multer使用自定義存儲方式的場景,例如:

const express = require('express')
const multer = require('multer')

// 配置 Multer 的存儲引擎
const storage = multer.diskStorage({
  // 設(shè)置上傳文件的存儲目錄
  destination: function (req, file, cb) {
    cb(null, './public/uploads/') // 回調(diào)函數(shù)指定存儲目錄為 'uploads/'
  },
  // 設(shè)置上傳文件的文件名
  filename: function (req, file, cb) {
    cb(null, file.originalname) // 回調(diào)函數(shù)指定文件名為上傳文件的原始文件名
  }
})

通常,一般的網(wǎng)頁應(yīng)用,只需要使用使用指定臨時存儲目錄!

文件下載

使用res.download()方法即可,例如:

//下載文件
router.get("/download", async (req, res) => {
  // 從請求的查詢參數(shù)中獲取要下載的文件名
  let file_name = req.query.file_name
  // 構(gòu)建要下載文件的完整路徑
  let file_path = process.cwd() + "/public/upload/" + file_name
  res.download(file_path)
})

常用API

Application

老規(guī)矩,先附上Express官方的API匯總文檔

  1. app.all(path, callback [, callback …])

    此方法類似于標準app.METHOD()方法,只不過它匹配所有 HTTP 動詞。

    舉個小例子:

    app.all('/secret', (req, res, next) => {
      console.log('HELLO WORLD!')
      next()
    })
    

    無論你使用哪種HTTP請求,控制臺總會輸出HELLO WORLD!

  2. app.use([path,] callback [, callback…])

    在指定路徑掛載指定的一個或多個中間件函數(shù):當請求路徑的基址匹配時,執(zhí)行中間件函數(shù)path。

    由于path默認為“/”,因此對于應(yīng)用程序的每個請求都將執(zhí)行沒有路徑安裝的中間件。

    例如,這個中間件函數(shù)將針對應(yīng)用程序的每個請求執(zhí)行:

    app.use((req, res, next) => {
      console.log('Time: %d', Date.now())
      next()
    })
    

    再例如,這個中間件函數(shù)將匹配/abcd開頭的路徑:

    app.use('/abcd', (req, res, next) => {
      console.log('abcd')
      next()
    })
    

    路徑示例:

    路徑 匹配路徑
    '/abcd' /abcd
    '/ab(c?)d' /abcd、/abd
    `//abc /xyz/`
    ['/abcd', '/xyz'] /abcd、/xyz
  3. app.delete(path, callback [, callback …])

  4. app.get(path, callback [, callback …])

  5. app.post(path, callback [, callback …])

  6. app.put(path, callback [, callback …])

Request

  1. req.baseUrl 獲取基礎(chǔ)路徑
  2. req.body 獲取body里面的內(nèi)容
  3. req.hostname 域名
  4. req.ip 訪問ip
  5. req.method 請求的方法
  6. req.originalUrl 原始路徑
  7. req.params 獲取屬性
  8. req.path 獲取路徑
  9. req.protocol 請求協(xié)議
  10. req.query 獲取query屬性
  11. req.route 當前路由信息

Response

  1. res.download(path [, filename] [, options] [, fn]) 下載文件

  2. res.end([data] [, encoding]) 結(jié)束響應(yīng)

  3. res.get(field) 獲取相應(yīng)HTTP頭

  4. res.redirect([status,] path) 重定向

  5. res.status(code) 設(shè)置響應(yīng)的HTTP狀態(tài)

  6. req.baseUrl 獲取基礎(chǔ)路徑

  7. req.body 獲取body里面的內(nèi)容

  8. req.hostname 域名

  9. req.ip 訪問ip

  10. req.method 請求的方法

  11. req.originalUrl 原始路徑

  12. req.params 獲取屬性

  13. req.path 獲取路徑

  14. req.protocol 請求協(xié)議

  15. req.query 獲取query屬性

  16. req.route 當前路由信息

Response

  1. res.download(path [, filename] [, options] [, fn]) 下載文件
  2. res.end([data] [, encoding]) 結(jié)束響應(yīng)
  3. res.get(field) 獲取相應(yīng)HTTP頭
  4. res.redirect([status,] path) 重定向
  5. res.status(code) 設(shè)置響應(yīng)的HTTP狀態(tài)

好啦!如果你覺得我的文章對你有幫助,請給我點個贊吧!非常感謝你能看到這里!文章來源地址http://www.zghlxwxcb.cn/news/detail-842152.html

到了這里,關(guān)于用前端的語言寫后端——Node.js之Express的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝

    Node后端框架Express與Koa接口統(tǒng)一響應(yīng)封裝

    以前在寫 SpringBoot 全棧開發(fā)的系列文章中全棧開發(fā)之后端腳手架:SpringBoot集成MybatisPlus代碼生成,分頁,雪花算法,統(tǒng)一響應(yīng),異常攔截,Swagger3接口文檔,有提到對后端接口的響應(yīng)數(shù)據(jù)進行統(tǒng)一的封裝,方便前端或者第三方進行數(shù)據(jù)獲取與對接工作;統(tǒng)一響應(yīng)一般包含狀態(tài)

    2024年02月05日
    瀏覽(30)
  • node.js中Express簡介

    node.js中Express簡介

    1.什么是Express 官方給出的概念:Express是基于Node.js平臺,快速、開放、極簡的web開發(fā)框架。 通俗理解:Express的作用和Node.js內(nèi)置的http模塊類似,是 專門用來創(chuàng)建web服務(wù)器的 Express的本質(zhì):就是一個npm上的第三方包,提供了快速創(chuàng)建Web服務(wù)器的便捷方法 2.進一步理解Express htt

    2024年02月08日
    瀏覽(28)
  • 09-Node.js—express框架

    09-Node.js—express框架

    express 是一個基于 Node.js 平臺的極簡、靈活的 WEB應(yīng)用開發(fā)框架,官方網(wǎng)址:https://www.expressjs.com.cn/ 簡單來說,express 是一個封裝好的工具包,封裝了很多功能,便于我們開發(fā) WEB 應(yīng)用(HTTP 服務(wù)) 大家都應(yīng)該玩過我的世界,在我的世界中如果純靠手去砍樹或者挖礦,效率是很低

    2023年04月26日
    瀏覽(27)
  • Node.js之express框架學(xué)習(xí)心得

    Node.js之express框架學(xué)習(xí)心得

    Node.js是基于Chrome V8引擎構(gòu)建的JavaScript運行時,它采用了完全不同的開發(fā)模型。Node.js使用事件驅(qū)動和非阻塞I/O的方式處理請求,通過單線程和異步機制,實現(xiàn)高效的并發(fā)處理。這意味著在Node.js中,一個線程可以處理數(shù)千個并發(fā)連接,大大提高了服務(wù)器的性能和可伸縮性。 4

    2024年02月14日
    瀏覽(35)
  • 【Node.js】Express-Generator:快速生成Express應(yīng)用程序的利器

    在Node.js世界中,Express是一個廣泛使用的、強大的Web應(yīng)用程序框架。它為開發(fā)者提供了一系列的工具和選項,使得創(chuàng)建高效且可擴展的Web應(yīng)用程序變得輕而易舉。然而,對于初學(xué)者來說,配置和初始化Express應(yīng)用程序可能會有些困難。為了解決這個問題,Express團隊推出了一款名

    2024年02月10日
    瀏覽(31)
  • node.js(express.js)+mysql實現(xiàn)登錄功能

    node.js(express.js)+mysql實現(xiàn)登錄功能

    實現(xiàn)步驟 1.檢測表單數(shù)據(jù)是否合法 2.根據(jù)用戶名查詢用戶的數(shù)據(jù) 3.判斷用戶輸入的密碼是否正確 4.生成JWT 的 Token 字符串 登錄接口完整代碼如下:controllers/user.js文件 一、檢測登錄表單的數(shù)據(jù)是否合法 1)安裝 jOi 包,為表單中攜帶的每個數(shù)據(jù)項,定義驗證規(guī)則: (2)安裝 @e

    2024年01月19日
    瀏覽(28)
  • node.js(express.js)+mysql實現(xiàn)注冊功能

    node.js(express.js)+mysql實現(xiàn)注冊功能

    /utils/db.js文件的代碼如下: 項目安裝指定版本bcryptjs庫 再插入新用戶時輸入中文username mysql會 出現(xiàn)字符集不匹配的情況 報錯情況如下: ER_CANT_AGGREGATE_2COLLATIONS: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation ‘=’ 原因: mysql數(shù)據(jù)庫建表的時候采

    2024年01月18日
    瀏覽(30)
  • Node.js: express + MySQL實現(xiàn)修改密碼

    Node.js: express + MySQL實現(xiàn)修改密碼

    ? ? ? ? 實現(xiàn)修改密碼,本篇文章實現(xiàn)修改密碼只考慮以下幾個方面: ? ? ? ? (1),獲取舊密碼 ? ? ? ? (2),獲取新密碼 ? ? ? ? (3),將獲取到的舊密碼與數(shù)據(jù)庫中的密碼進行比對(避免修改錯用戶) ? ? ? ? (4),新密碼與進密碼進行比對,新密碼和舊密碼不

    2024年02月16日
    瀏覽(20)
  • node.js項目express的初始化

    node.js項目express的初始化

    ?? 點贊,你的認可是我創(chuàng)作的動力! ?? 收藏,你的青睞是我努力的方向! ?? 評論,你的意見是我進步的財富! 在D盤新建一個文件夾,文件夾命名為api 將文件夾拖拽到vscode上面進行打開 新建一個終端 輸入 npm init -y,初始化包管理工具 輸入npm i express,安裝express框架

    2024年01月18日
    瀏覽(26)
  • Node.js-Express框架基本使用

    Express是基于 node.js 的web應(yīng)用開發(fā)框架,是一個封裝好的工具包,便于開發(fā)web應(yīng)用(HTTP服務(wù)) 中間件(Middleware):是一個回調(diào)函數(shù),像路由一樣可以訪問請求對象(request, response). 作用:使用函數(shù)封裝公共操作,簡化代碼。 全局中間件 路由中間件 靜態(tài)資源中間件 注意事項 1、

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包