手把手教你用node.js搭建一個Web服務(wù)
一、引言
Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境,可用于開發(fā)各種類型的應(yīng)用程序,包括 Web 服務(wù)。本文將介紹如何使用 Node.js 搭建一個簡單的 Web 服務(wù),并附帶示例代碼。
二、創(chuàng)建 node 項(xiàng)目
創(chuàng)建一個名為 node-serve 的文件夾,然后在當(dāng)前文件下輸入初始化node項(xiàng)目命令。
npm init
然后一直按回車即可,完成之后可生成一個 package.json 文件。
中間的配置過程可后續(xù)在生成的 package.json 文件中配置
在當(dāng)前文件夾下新建一個 index.js 的文件,為當(dāng)前項(xiàng)目的主入口文件。
到這里 node 項(xiàng)目基本就創(chuàng)建完成了。
三、創(chuàng)建 Web 服務(wù)
下載 express 包
npm install express --save
編寫 index.js 文件,引入 express 并啟動一個服務(wù)
const express = require('express'); const app = express(); // 設(shè)置路由 ( 接口 ) app.get('/', (req, res) => { res.send('Hello World!'); }); // 啟動服務(wù) app.listen(3000, () => { console.log('Server started on port 3000'); });
在這個示例中,我們創(chuàng)建了一個 express 應(yīng)用,并設(shè)置了一個路由,當(dāng)訪問根路徑 /
時,返回字符串 'Hello World!'
。
在當(dāng)前文件夾下使用終端命令啟動服務(wù)
node index.js
使用 postman 測試如下
四、使用中間件
中間件是指那些在處理 HTTP 請求和響應(yīng)周期中的某個特定階段執(zhí)行代碼的函數(shù)。這些函數(shù)可以執(zhí)行各種任務(wù),例如解析請求體、驗(yàn)證身份、記錄日志、路由處理等。
body-parser
body-parser 是一個 Node.js 中間件,用于解析 HTTP 請求體。它提供了多種解析器,如 JSON、Raw、Text 和 URL-encoded form,以處理不同類型的請求體。
const express = require('express'); const bodyParser = require('body-parser'); const app = express(); // 使用 body-parser 中間件解析 JSON 請求體 app.use(bodyParser.json()); // 使用 body-parser 中間件解析 URL-encoded form 請求體 app.use(bodyParser.urlencoded({ extended: true })); // 定義路由處理程序 app.get('/', (req, res) => { res.send('Hello World!'); }); app.post('/api/data', (req, res) => { // 解析請求體中的 JSON 數(shù)據(jù) const data = req.body; // 處理數(shù)據(jù)... }); app.listen(3000, () => { console.log('Server started on port 3000'); });
自定義中間件
const express = require('express'); const app = express(); // 定義一個中間件函數(shù) function myMiddleware(req, res, next) { console.log('Middleware executed'); next(); // 調(diào)用 next() 函數(shù)以將控制權(quán)傳遞給下一個中間件或路由處理器 } app.use(myMiddleware); // 將中間件應(yīng)用到應(yīng)用中 app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(3000, () => { console.log('Server started on port 3000'); });
五、http 請求和 http 響應(yīng)
http 請求
// HTTP請求方法(GET、POST、PUT、DELETE等)。 req.method // HTTP請求的URL。 req.url // 請求的URL路徑名。 req.path // 包含在URL查詢字符串中的參數(shù)對象。 req.query // 包含HTTP請求頭的對象。 req.headers // 包含在POST請求中的請求主體的對象。需要使用body-parser中間件才能訪問。 req.body // 包含路由參數(shù)的對象。例如,對于路徑/user/:id,req.params.id將包含匹配的ID。 req.params // 客戶端的IP地址。 req.ip // 請求的主機(jī)名。 req.host // 獲取HTTP請求頭的指定字段的值。 req.get(field) // 獲取客戶端的cookie。選項(xiàng)可以包括簽名選項(xiàng)(如果cookie是加密的)。 req.cookie(name[, options])
以上是常見請求對象及方法
http 響應(yīng)
res
代表 HTTP 響應(yīng)對象。通過 res
,你可以設(shè)置 HTTP 響應(yīng)的狀態(tài)碼、響應(yīng)頭和響應(yīng)主體。
// HTTP 響應(yīng)的狀態(tài)碼,表示請求的處理結(jié)果。例如,200 表示成功,404 表示找不到資源。 res.status(code) //設(shè)置 HTTP 響應(yīng)的響應(yīng)頭。name 參數(shù)是響應(yīng)頭的名稱,value 參數(shù)是響應(yīng)頭的值。 res.setHeader(name, value) //獲取 HTTP 響應(yīng)的響應(yīng)頭。name 參數(shù)是響應(yīng)頭的名稱。 res.getHeader(name) //移除 HTTP 響應(yīng)的響應(yīng)頭。name 參數(shù)是響應(yīng)頭的名稱。 res.removeHeader(name) //設(shè)置一個 HTTP cookie,并將值存儲在客戶端上。 res.cookie(name, value) //設(shè)置 HTTP 響應(yīng)一個 JSON 對象、一個數(shù)組或者一個字符串。 res.json(json) //響應(yīng)一個字符串、一個數(shù)字、一個布爾值或者一個對象。 res.send(body) //渲染一個視圖模板并將結(jié)果發(fā)送到客戶端。 res.render(view, [options], callback) //將 HTTP 響應(yīng)標(biāo)記為附件,通常用于下載功能。filename 參數(shù)是可選的,表示要下載的文件名。 res.attachment([filename]) //將指定的文件作為 HTTP 響應(yīng)發(fā)送給客戶端。path 參數(shù)是文件的路徑,options 參數(shù)是可選的,用于配置文件的響應(yīng)選項(xiàng)。 res.sendFile(path[, options]) //將指定的文件作為 HTTP 下載提供給客戶端。path 參數(shù)是文件的路徑,filename 參數(shù)是可選的,表示要下載的文件名。 res.download(path[, filename]) //將客戶端重定向到指定的 URL。 res.redirect(url)
以上是常見響應(yīng)方法
六、使用路由(多文件)
創(chuàng)建 router.js
const express = require('express'); const router = express.Router(); // 定義一個路由處理程序,用于處理GET請求 router.get('/test', function(req, res) { res.send('Hello World!'); }); // 定義另一個路由處理程序,用于處理POST請求 router.post('/submit', function(req, res) { res.send('Submit received!'); }); module.exports = router;
在 index.js 中引用 router.js
const express = require('express'); const app = express(); const router = require('./router'); // 導(dǎo)入路由器對象 // 將路由器對象添加到應(yīng)用程序中 app.use(router); //(訪問 localhos/test) // 將路由器對象添加到應(yīng)用程序中(加入自定義統(tǒng)一前綴) app.use('/api',router); //(訪問 localhost/api/test) app.listen(3000, function() { console.log('Server is running on port 3000'); });
總結(jié)
到此這篇關(guān)于用node.js搭建一個Web服務(wù)的文章就介紹到這了,更多相關(guān)node.js搭建Web服務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!