Node.js中Get和Post請求
阿新 • • 發佈:2018-12-20
對於HTTP請求來說,我們通常使用的是Get和Post,除此之外還有put,delete等,而對於get來說,比較lightweight,只是對字串的傳輸,它會被新增到URL地址裡,屬於URL的一部分;而對於Post來說,就顯得重了一些,它的資料以包的形式存在,除了可以有文字資訊,還可以有二進位制檔案流資訊。
1.GET
--------資料在URL中
使用NodeJs實現對Get請求的處理,nodejs接入的形式為url?param1=zzl¶m2=male
下面為GET例項:
var redis = require("redis"); var http = require('http'); var url = require("url"); var info = "通過HTTPGet方式成功加入佇列"; http.createServer(function (req, res) { var params = url.parse(req.url, true).query; //解釋url引數部分name=zzl&
[email protected] var client = redis.createClient(); client.lpush("topnews", params.info); res.writeHead(200, { 'Content-Type': 'text/plain;charset=utf-8' }); client.lpop("topnews", function (i, o) { console.log(o); //回撥,所以info可能沒法得到o的值,就被res.write輸出了 }) client.quit(); res.write(info); res.end();}).listen(8000, "127.0.0.1"); console.log('Server running at http://127.0.0.1:8000/');
2.POST
------資料不在URL中
nodejs接入的形式為{param1="zzl",param2="male"},因為接收的資料量大所以資料會分段傳送。
Post由於它的重量,所以不可能說接收就接收,它會儲存接入中和接入完成兩種狀態,兩種狀態對應著回撥方法,即,當然資料處於接入中狀態時,處理一種流程;當資料接入完成後,處理另一種流程。
//接入中 req.addListener("data", function () {});有一段資料到達,會很多次。
//接收完成 req.addListener("end", function () {});資料全部到達,只有一次。
var http = require('http');
var url = require("url");
var querystring = require("querystring");
http.createServer(function (req, res) {
// 設定接收資料編碼格式為 UTF-8
req.setEncoding('utf-8');
var postData = ""; //POST & GET : name=zzl&[email protected]
// 資料塊接收中
req.addListener("data", function (postDataChunk) {
postData += postDataChunk;
});
// 資料接收完畢,執行回撥函式
req.addListener("end", function () {
console.log('資料接收完畢');
var params = querystring.parse(postData);
////解釋表單資料部分
{name="zzl",email="[email protected]"}
console.log(params);
console.log(params["name"]);
PushToRedis(params["name"]);
res.writeHead(500, {
"Content-Type": "text/plain;charset=utf-8" });
res.end("資料提交完畢");
});}).listen(8000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8000/');
如果你覺得還是沒有理解具體的用法,我下面還寫了一個例子:
const http = require("http")
const fs = require("fs");
const querystring = require("querystring");
const urlLib = require("url");
var server = http.createServer(function(req,res){
//GET
var obj = urlLib.parse(req.url,true);
var url = obj.pathname;
const GET = obj.query;
//POST
var str="";
req.on("data",function(data){
str+=data;
});
req.on("end",function(){
const POST = querystring(str);
});
console.log(url,GET,POST);
if(url == './user'){//請求
switch(GET.act){
case 'rag':
if(users[GET.user]){
res.write(OK,false,'msg',"此使用者已經存在!");
}
else{
users[GET.user]=GET.pass;
res.write("OK",true,"msg","註冊成功!");
}
break;
case 'login':
if(users[GET.user] == null){
res.write("OK",false,"msg","該使用者名稱已經被註冊!");
}else if(users[GET.user]!=GET.pass){
res.write("OK",false,"msg","使用者名稱或密碼錯誤!");
}else{
res.write("OK",true,"msg","登入成功!");
}
break;
default:
res.write("OK",false,"msg","未知的act");
}
res.end();
}else{//檔案
}
//檔案請求
var file_name = './www' + url;
fs.readFile(file_name,function(error,data){
if(err){
res.write('404');
}
else{
res.write(data);
}
res.end();
});
});
server.listen(8080,function(){
console.log("檔案開啟成功!");
});
以上皆為自己想法,有分歧歡迎私信。