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