亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

初始化項目

npm init -y

安裝express

npm i express

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

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

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

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

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

// 監(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、獲取請求參數

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

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

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

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

二、express路由

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

1、直接使用路由

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

// 監(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、使用路由器

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

// 導入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')
})
// 導出路由器
modules.exports = router

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

// 導入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')
})
// 導出路由器
modules.exports = router

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

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

3、封裝路由處理函數

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

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

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

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

三、express中間件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// 導入cors
const cors = require('cors')
// 導入中間件
const { resSendMiddleware, handleError } = require('../common/middleware.js')
// 注冊解決跨域問題中間件
app.use(cors)
// 注冊內置中間件
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)視代碼修改并自動重新啟動應用程序

npm install -g nodemon

運行代碼

nodemon index.js

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

相關文章

  • 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性能的應用技巧分享

    提高Node.js性能的應用技巧分享

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

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

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

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

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

    預防NodeJS命令注入的方法詳解

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

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

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

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

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

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

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

    Node.js調用java之node-java問題

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

    node.js超時timeout詳解

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

最新評論