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