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