欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于nodejs使用express創(chuàng)建web服務(wù)器的操作步驟

 更新時間:2023年07月04日 08:33:04   作者:Harbour  
express實際上是對nodejs內(nèi)置http進行封裝后的第三方包,其中提供了快捷創(chuàng)建web服務(wù)器以及處理請求路由的方法,使我們可以更加方便快捷的實現(xiàn)一個web服務(wù)器項目,本文件給大家詳細介紹基于nodejs使用express?創(chuàng)建web服務(wù)器的操作步驟

一、創(chuàng)建web服務(wù)器

1、初始化項目并安裝express包

初始化項目

npm init -y

安裝express

npm i express

2、創(chuàng)建服務(wù)器

1、創(chuàng)建一個index.js文件 2、導(dǎo)入express 3、創(chuàng)建服務(wù)器 4、調(diào)用listen啟動服務(wù)器(listen傳入兩個參數(shù):端口號,回調(diào)函數(shù)) 5、在當前目錄下使用node index.js啟動該程序,控制臺打印出:Server is running on port 3000,則表示服務(wù)器在3000端口啟動成功

// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建服務(wù)器
const app = express()
// 調(diào)用listen啟動服務(wù)器
app.listen(3000, () => {
    console.log('Server is running on port 3000')
})
node index.js

3、監(jiān)聽get,post請求

監(jiān)聽get,post請求(req:請求參數(shù),res:響應(yīng)參數(shù)),使用res.send(data)向web段響應(yīng)數(shù)據(jù)

// 監(jiān)聽GET請求
app.get('/', (req, res) => {
    res.send('Hello, GET request received!')
})
// 監(jiān)聽POST請求
app.post('/', (req, res) => {
    res.send('Hello, POST request received!')
})

4、獲取請求參數(shù)

web端向服務(wù)器傳遞參數(shù),可以通過params,query,body傳遞參數(shù),其中一般get請求使用params,query傳遞參數(shù),post請求使用body傳遞參數(shù) 1、get請求使用params獲取參數(shù),請求url:http://127.0.0.1:3000/test/123,此時web獲取響應(yīng)id:123

// 獲取params參數(shù)
app.get('/test/:id', (req, res) => {
    const id = req.params.id
    res.send(`id: ${id}`)
})

3、post請求使用body獲取參數(shù),請求url:http://127.0.0.1:3000/test。對于post請求,我們首先使用app.use中間件來解析請求的表單數(shù)據(jù)。通過express.urlencoded中間件來解析x-www-form-urlencoded格式的表單數(shù)據(jù),其中extended: false表示不使用第三方庫來處理嵌套的對象。如果你需要處理其他類型的數(shù)據(jù)(例如JSON數(shù)據(jù)),你可以使用express.json中間件。(中間件概念后續(xù)會有詳細介紹) 請求數(shù)據(jù):{id: 123, name: whg},響應(yīng)數(shù)據(jù):testData: {id: 123, name: whg}

app.use(express.urlencoded({ extended: false }))
app.use(express.json())
// 獲取body參數(shù)
app.post('/test', (req, res) => {
    const testData = req.body
    res.send(`testData: ${testData}`)
})

二、express路由

在Express中,路由(Routing)是指將不同的HTTP請求映射到相應(yīng)的處理程序或控制器的過程。Express提供了一種簡單而靈活的方式來定義和管理路由,使開發(fā)人員能夠處理不同的URL路徑和HTTP方法。

1、直接使用路由

監(jiān)聽get,post請求中的/test路由,當請求url為http://127.0.0.1:3000/test時,進入對應(yīng)的請求處理函數(shù)中

// 監(jiān)聽GET請求/test路由
app.get('/test', (req, res) => {
    res.send('Hello, GET request received!')
})
// 監(jiān)聽POST請求/test路由
app.post('/test', (req, res) => {
    res.send('Hello, POST request received!')
})

2、使用路由器

路由器是一個中間件,用于將具有共同路徑前綴的相關(guān)路由組合在一起。它可以看作是一個獨立的模塊,負責(zé)處理特定的URL路徑。使用路由器可以將應(yīng)用程序的路由邏輯組織成模塊化的方式,提高代碼的可維護性和可讀性 創(chuàng)建用戶登陸注冊路由器模塊:users.js

// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建路由器
const router = express.Router()
// 使用路由器監(jiān)聽路由
router.post('/login', (req, res) => {
    res.send('login success')
})
router.post('/register', (req, res) => {
    res.send('register success')
})
// 導(dǎo)出路由器
modules.exports = router

創(chuàng)建用戶信息相關(guān)路由器模塊:userInfo.js

// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建路由器
const router = express.Router()
// 使用路由器監(jiān)聽路由
router.post('/setUserInfo', (req, res) => {
    res.send('setUserInfo success')
})
router.post('/getUserInfo', (req, res) => {
    res.send('getUserInfo success')
})
// 導(dǎo)出路由器
modules.exports = router

在index.js中導(dǎo)入并注冊該路由器 app.use注冊路由時可傳入兩個參數(shù),第一個參數(shù)為統(tǒng)一前綴(可選,不傳則默認沒有前綴),第二個參數(shù)為路由器。當url為http://127.0.0.1:3000/login時進入登錄路由處理函數(shù)中,當url為http://127.0.0.1:3000/api/setUserInfo時,進入設(shè)置用戶信息路由處理函數(shù)中

// 導(dǎo)入路由器
const userRouter = require('./users')
const userInfoRouter = require('./userInfo')
// 注冊路由
app.use(userRouter)
app.use('/api', userInfoRouter)

3、封裝路由處理函數(shù)

將路由相關(guān)邏輯進一步模塊化(以user.js為例) 創(chuàng)建routerHandler文件夾,存放users.js文件(注意,和router文件夾下的文件名相同,可清晰看出路由器文件和處理函數(shù)文件的一一對應(yīng)關(guān)系)

// 登錄路由處理函數(shù)
exports.login = (req, res) => {
    res.send('login success')
}
// 注冊路由處理函數(shù)
exports.register = (req, res) => {
    res.send('register success')
}

創(chuàng)建router文件夾,存放users.js文件

// 導(dǎo)入express
const express = require('express')
// 創(chuàng)建路由器
const router = express.Router()
// 導(dǎo)入路由處理函數(shù)
const { login, register } = require('../routerHandler/user.js')
// 使用路由器監(jiān)聽路由
router.post('/login', login)
router.post('/register', register)
// 導(dǎo)出路由器
modules.exports = router

三、express中間件

Express中間件(Middleware)是在請求和響應(yīng)之間處理HTTP請求的功能組件。中間件函數(shù)可以訪問請求對象(req)、響應(yīng)對象(res)和應(yīng)用程序的下一個中間件函數(shù)(next)。中間件函數(shù)可以用于執(zhí)行各種任務(wù),例如身份驗證、日志記錄、錯誤處理等。使用中間件可以將應(yīng)用程序的處理邏輯分解為可重用和可組合的部分,提高代碼的可維護性和可擴展性。中間件大致分為以下5種,下面我們使用模塊化的思想將所有自定義的中間件放在common文件夾的middleware.js文件中

1、應(yīng)用級中間件(Application-level Middleware)

應(yīng)用級中間件又稱為全局中間件,這些中間件綁定到應(yīng)用程序?qū)ο螅╝pp)上,并在所有路由之前執(zhí)行。它們可以用于處理應(yīng)用程序級別的任務(wù),如日志記錄、身份驗證、錯誤處理等。使用app.use()方法將應(yīng)用級中間件添加到應(yīng)用程序中。 中間件函數(shù)中一定要調(diào)用next()方法,否則會報錯

// 定義一個應(yīng)用級中間件,該中間件封裝了res.send()方法
exports.resSendMiddleware = (req, res, next) => {
    res.commonResSend = (status, message, data) => {
        res.send({
            status,
            message,
            data: data ? data : null
        })
    }
    next()
}

注意:全局中間件一般要放在路由中間件之前

// 導(dǎo)入中間件
const { resSendMiddleware } = require('../common/middleware.js')
// 注冊全局中間件
app.use(resSendMiddleware)
// 注冊路由中間件
// TODO

2、路由級中間件(Router-level Middleware)

路由級中間件又稱為局部中間件這些中間件與特定的路由綁定,并在特定路由處理程序之前執(zhí)行。它們用于在特定路由上執(zhí)行一些操作,如身份驗證、請求處理等。使用express.Router()創(chuàng)建路由對象,然后使用router.use()將路由級中間件添加到路由對象中。

// 定義一個路由級中間件,該中間件封裝了校驗登錄數(shù)據(jù)合法性
exports.verifyLogin = (req, res, next) => {
    const userInfo = req.body
    // 校驗邏輯
    // TODO
    next()
}
// 導(dǎo)入路由處理函數(shù)
const { login, register } = require('../routerHandler/user.js')
// 導(dǎo)入中間件
const { verifyLogin } = require('../common/middleware.js')
// 使用路由器監(jiān)聽路由
router.post('/login', verifyLogin, login)
router.post('/register', register)
// 導(dǎo)出路由器
modules.exports = router

3、錯誤處理中間件(Error Handling Middleware)

這些中間件用于處理發(fā)生在路由處理程序中的錯誤。它們在其他中間件和路由處理程序之后定義,并使用四個參數(shù)(err, req, res, next)來捕獲錯誤并處理它們。使用app.use()將錯誤處理中間件添加到應(yīng)用程序中。

// 定義一個錯誤中間件,捕捉錯誤
exports.handleError = (err, req, res, next) => {
    if (err.name === 'UnauthorizedError') {
        // JWT 認證失敗
        res.commonResSend(401, '身份認證失敗')
    }
}
// 導(dǎo)入中間件
const { resSendMiddleware, handleError } = require('../common/middleware.js')
// 注冊全局中間件
app.use(resSendMiddleware)
// 注冊路由
// TODO
// 注冊錯誤中間件
app.use(handleError)

4、第三方中間件(Third-party Middleware)

這些中間件是由第三方開發(fā)人員創(chuàng)建的,可以通過NPM安裝并在Express應(yīng)用程序中使用。第三方中間件可以提供各種功能,如身份驗證、日志記錄、壓縮等。使用app.use()將第三方中間件添加到應(yīng)用程序中。 例如處理跨域中間件cors,使用npm i cors安裝之后,可直接引用并注冊

// 導(dǎo)入cors
const cors = require('cors')
// 導(dǎo)入中間件
const { resSendMiddleware, handleError } = require('../common/middleware.js')
// 注冊解決跨域問題中間件
app.use(cors)
// 注冊全局中間件
app.use(resSendMiddleware)
// 注冊路由中間件
// TODO
// 注冊錯誤中間件
app.use(handleError)

5、內(nèi)置中間件(Built-in Middleware)

Express提供了一些內(nèi)置的中間件,可直接在應(yīng)用程序中使用,而無需安裝額外的包。例如,express.urlencoded(),express.json()用于解析請求的JSON數(shù)據(jù),express.static()用于提供靜態(tài)文件等。

// 導(dǎo)入cors
const cors = require('cors')
// 導(dǎo)入中間件
const { resSendMiddleware, handleError } = require('../common/middleware.js')
// 注冊解決跨域問題中間件
app.use(cors)
// 注冊內(nèi)置中間件
app.use(express.urlencoded({ extended: false }))
app.use(express.json())
app.use(express.static('public'))
// 注冊全局中間件
app.use(resSendMiddleware)
// 注冊路由中間件
// TODO
// 注冊錯誤中間件
app.use(handleError)

四、代碼熱更新

為了避免我們每次修改代碼后都需要執(zhí)行一次node index.js來重新運行代碼,我們可以全局安裝nodemon來監(jiān)視代碼修改并自動重新啟動應(yīng)用程序

npm install -g nodemon

運行代碼

nodemon index.js

以上就是基于nodejs使用express創(chuàng)建web服務(wù)器的操作步驟的詳細內(nèi)容,更多關(guān)于nodejs express創(chuàng)建web服務(wù)器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Node.js 中正確使用 async/await 與 Promise 對象配合(操作方法)

    Node.js 中正確使用 async/await 與 Promise 

    在Node.js中,async/await是ES2017引入的一種更簡潔的處理異步操作的方式,它基于Promise來進行編寫,使得異步代碼看起來更像同步代碼,易于理解和維護,這篇文章主要介紹了Node.js 中正確使用 async/await 與 Promise 對象配合,需要的朋友可以參考下
    2024-07-07
  • 提高Node.js性能的應(yīng)用技巧分享

    提高Node.js性能的應(yīng)用技巧分享

    Node.js 是單線程非阻塞 I/O, 使其可以支持成千上萬的并發(fā)操作。這和 NGINX 解決 C10K 問題的方式如出一轍。Node.js 以高效的性能和開發(fā)效率著稱。
    2017-08-08
  • nodejs讀取圖片返回給瀏覽器顯示

    nodejs讀取圖片返回給瀏覽器顯示

    這篇文章主要為大家詳細介紹了nodejs讀取圖片返回給瀏覽器顯示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Nodejs抓取html頁面內(nèi)容(推薦)

    Nodejs抓取html頁面內(nèi)容(推薦)

    這篇文章主要介紹了Nodejs抓取html頁面內(nèi)容的關(guān)鍵代碼,另外還給大家附上了nodejs抓取網(wǎng)頁內(nèi)容,非常不錯,對node.js抓取頁面內(nèi)容感興趣的朋友一起學(xué)習(xí)吧
    2016-08-08
  • 預(yù)防NodeJS命令注入的方法詳解

    預(yù)防NodeJS命令注入的方法詳解

    Node.js和npm為前端生態(tài)中提供了統(tǒng)一的開發(fā)語言、強大的包管理和模塊生態(tài)系統(tǒng)、靈活的構(gòu)建工具和任務(wù)自動化、以及豐富的前端框架和庫等等,本文給大家介紹了如何預(yù)防NodeJS命令注入,文中有詳細的代碼講解,需要的朋友可以參考下
    2023-12-12
  • 詳解nodejs異步I/O和事件循環(huán)

    詳解nodejs異步I/O和事件循環(huán)

    本篇文章主要介紹了nodejs異步I/O和事件循環(huán),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • windows利用nvm管理node.js2025最新版

    windows利用nvm管理node.js2025最新版

    本文主要介紹了在Windows系統(tǒng)上使用nvm管理Node.js版本的過程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • node.js使用fs讀取文件出錯的解決方案

    node.js使用fs讀取文件出錯的解決方案

    在本篇文章里我們給大家?guī)硪黄P(guān)于node.js使用fs讀取文件出錯的解決辦法,有需要的朋友們參考下。
    2019-10-10
  • Node.js調(diào)用java之node-java問題

    Node.js調(diào)用java之node-java問題

    這篇文章主要介紹了Node.js調(diào)用java之node-java問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • node.js超時timeout詳解

    node.js超時timeout詳解

    本文介紹了nodejs中超時timeout事件,并給出了詳細的示例分析,非常的詳盡,推薦給需要的小伙伴參考下
    2014-11-11

最新評論