Node.js中參數(shù)傳遞的兩種方式詳解
參數(shù)傳遞方式
在Node.js中,參數(shù)傳遞常見(jiàn)的共兩種方式:
- GET方式:通過(guò)地址欄鍵=值的方式進(jìn)行傳遞。
- POST方式:通過(guò)表單的方式傳遞請(qǐng)求數(shù)據(jù)。
GET方式
GET方式通常是在請(qǐng)求地址中以【?參數(shù)1=值1&參數(shù)2=值2】的格式進(jìn)行傳遞,在Node.js中可以通過(guò)獲取url然后進(jìn)行獲取參數(shù),如下所示:
//1.引入http模塊 var http = require('http'); //2.創(chuàng)建服務(wù) var server = http.createServer(); //3. 監(jiān)聽(tīng)請(qǐng)求事件,當(dāng)有請(qǐng)求時(shí),觸發(fā)回調(diào)函數(shù) server.on('request',function(req,res){ res.writeHead(200,{"content-type":"text/html;charset=utf-8"}); var url = req.url; if(url.indexOf('?')>0){ params = url.split('?')[1]; paramArray = params.split('&'); res.write("<h3>請(qǐng)求的參數(shù)為:</h3>"); for(var index in paramArray){ res.write(paramArray[index]) res.write("<br />"); } } res.end(); }); //4. 監(jiān)聽(tīng)8080端口 server.listen(8080,function(){ console.log("server is running"); });
運(yùn)行示例,在瀏覽器中打開(kāi),如下所示:
POST方式
目前一般采用form表單的方式傳遞POST數(shù)據(jù)。在Node.js中,POST傳遞的數(shù)據(jù)在請(qǐng)求體中。
首先創(chuàng)建一個(gè)reg.html靜態(tài)html頁(yè)面,然后提交數(shù)據(jù)到action.html,具體如下所示:
//1.引入http模塊 var http = require('http'); var fs = require('fs'); var path = require('path'); //2.創(chuàng)建服務(wù) var server = http.createServer(); var extnames = {".html":"text/html",".css":"text/css",".png":"image/png"}; //3. 監(jiān)聽(tīng)請(qǐng)求事件,當(dāng)有請(qǐng)求時(shí),觸發(fā)回調(diào)函數(shù) server.on('request',function(req,res){ var url=req.url; if(url==="/"){ url="/index.html"; } var localPath = './www'+url; var extname = path.extname(localPath); res.writeHead(200,{"content-type":""+extnames[extname]+";charset=utf-8"}); if(url==="/action.html"){ //從請(qǐng)求主體中獲取POST方式傳輸?shù)臄?shù)據(jù) var params=''; req.on('data',function(data){ params += data.toString(); }); //監(jiān)聽(tīng)結(jié)束事件 req.on('end',function(){ res.write("<h3>后臺(tái)已經(jīng)收到請(qǐng)求:</h3>"); res.write(params); res.end(); }); return; } console.log(localPath); if(extname===".ico"){ res.end(); }else{ fs.readFile(localPath,function(err,data){ res.write(data); res.end(); }); } }); //4. 監(jiān)聽(tīng)8080端口 server.listen(8080,function(){ console.log("server is running"); });
運(yùn)行服務(wù),然后在瀏覽器輸入網(wǎng)址,如下所示:
注意:可以看出,GET方式和POST方式的參數(shù)結(jié)構(gòu)都是一樣的,只是GET通過(guò)URL,POST通過(guò)請(qǐng)求主體。
動(dòng)態(tài)網(wǎng)頁(yè)
在之前的示例中,所有的html頁(yè)面都是靜態(tài)頁(yè)面,不會(huì)隨著用戶請(qǐng)求的變化而變化。那如何動(dòng)態(tài)的變更網(wǎng)頁(yè)呢?答案是采用模板。
首先創(chuàng)建一個(gè)html頁(yè)面,并在頁(yè)面中定義一個(gè)變量。如下所示:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>這是首頁(yè)</title> <link type="text/css" href="css/index.css" rel="external nofollow" /> </head> <body> <h3>這是首頁(yè)</h3> <h3>你的訪問(wèn)IP為:</h3> <h3><%=ipAddr%></h3> </body> </html>
然后在Node.js后端程序中,動(dòng)態(tài)獲取變量的值,并進(jìn)行替換,如下所示:
var http = require('http'); var fs = require('fs'); var path = require('path'); //2.創(chuàng)建服務(wù) var server = http.createServer(); var extnames = {".html":"text/html",".css":"text/css",".png":"image/png"}; //3. 監(jiān)聽(tīng)請(qǐng)求事件,當(dāng)有請(qǐng)求時(shí),觸發(fā)回調(diào)函數(shù) server.on('request',function(req,res){ var url=req.url; if(url==="/"){ url="/index.html"; } var localPath = './www'+url; var extname = path.extname(localPath); res.writeHead(200,{"content-type":""+extnames[extname]+";charset=utf-8"}); console.log(localPath); if(extname===".ico"){ res.end(); }else{ fs.readFile(localPath,function(err,data){ var ip = req.socket.remoteAddress; var content = render(data.toString(),'<%=ipAddr%>',ip); res.write(content); res.end(); }); } }); //4. 監(jiān)聽(tīng)8080端口 server.listen(8080,function(){ console.log("server is running"); }); function render(html,name,value){ return html.replace(name,value); }
運(yùn)行示例,在瀏覽器中輸入http://http://127.0.0.1:8080/,如下所示:
注意:IP為客戶端IP,隨著訪問(wèn)的客戶端電腦而改變。
以上示例都是Node.js的原生開(kāi)發(fā)方式,存在諸多不便,后面將通過(guò)引入框架來(lái)提高開(kāi)發(fā)的效率。
到此這篇關(guān)于Node.js中參數(shù)傳遞的兩種方式詳解的文章就介紹到這了,更多相關(guān)Node.js參數(shù)傳遞方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node.js 核心http模塊,起一個(gè)服務(wù)器,返回一個(gè)頁(yè)面的實(shí)例
下面小編就為大家?guī)?lái)一篇node.js 核心http模塊,起一個(gè)服務(wù)器,返回一個(gè)頁(yè)面的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Node.js + Redis Sorted Set實(shí)現(xiàn)任務(wù)隊(duì)列
本文給大家分享的是使用Node.js + Redis Sorted Set實(shí)現(xiàn)任務(wù)隊(duì)列的方法示例,非常的實(shí)用,有需要的小伙伴可以參考下2016-09-09零基礎(chǔ)實(shí)現(xiàn)node+express個(gè)性化聊天室的示例
這篇文章主要介紹了零基礎(chǔ)實(shí)現(xiàn)node+express個(gè)性化聊天室的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02Node.js發(fā)起HTTP請(qǐng)求的6種不同方法小結(jié)
本文主要介紹了Node.js發(fā)起HTTP請(qǐng)求的6種不同方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Node.js中module.exports?和exports使用誤區(qū)
本文主要介紹了Node.js中module.exports?和exports使用誤區(qū),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Node.js學(xué)習(xí)教程之HTTP/2服務(wù)器推送【譯】
這篇文章主要給大家介紹了關(guān)于Node.js學(xué)習(xí)教程之HTTP/2服務(wù)器推送的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10詳解如何在vscode里面調(diào)試js和node.js的方法步驟
這篇文章主要介紹了詳解如何在vscode里面調(diào)試js和node.js的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12在Node.js中發(fā)出HTTP請(qǐng)求的 5 種方法
學(xué)習(xí)如何在 Node.js 中發(fā)出 HTTP 請(qǐng)求可能會(huì)讓人感到不知所措,因?yàn)橛袛?shù)十個(gè)可用的庫(kù),每個(gè)解決方案都聲稱比上一個(gè)更高效,在這篇文章中,我們將探討在 Node.js 中發(fā)出 HTTP 請(qǐng)求的五種最流行的方法,并為每種方法提供說(shuō)明,需要的朋友可以參考下2023-11-11node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋
這篇文章主要介紹了node.js利用socket.io實(shí)現(xiàn)多人在線匹配聯(lián)機(jī)五子棋的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05