獲取http請求報文頭部信息
利用nodejs中的 http.ServerRequest中獲取1):
request.method
用來標識請求類型
request.headers
其中我們關心兩個欄位:
content-type
包含了表單類型和邊界字元串(下面會介紹)信息。
content-length
post數據的長度
關於content-type
get請求的headers中沒有content-type這個欄位
post 的 content-type 有兩種
application/x-www-form-urlencoded
這種就是一般的文本表單用post傳地數據,只要將得到的data用querystring解析下就可以了
multipart/form-data
文件表單的傳輸,也是本文介紹的重點
獲取POST數據
前面已經說過,post數據的傳輸是可能分包的,因此必然是非同步的。post數據的接受過程如下:
注意,對於非文件post數據,上面以字元串接收是沒問題的,但其實 postDataChunk 是一個 buffer 類型數據,在遇到二進制時,這樣的接受方式存在問題。
B. nodejs 怎樣知道請求是get或post
一 express框架接收
app.get('/',function(req,res) { var url = req.query.url; var name = req.query.name; console.log(url, name);});
二 接收Get
1. get參數在req.url上
2. 使用url.parse將數據由字元串轉變為obj
index.js:
var http = require('http');var url = require('url');var util = require('util'); //req 請求信息 res返回信息http.createServer(function(req, res){ res.writeHeader(200, {'Content-Type':'text/javascript;charset=UTF-8'}); //狀態碼+響應頭屬性 // 解析 url 參數 var params = url.parse(req.url, true).query; //parse將字元串轉成對象,req.url="/?url=123&name=321",true表示params是{url:"123",name:"321"},false表示params是url=123&name=321 res.write("網站名:" + params.name); res.write("\n"); res.write("網站 URL:" + params.url); res.end(); }).listen(3000);
瀏覽器打開:
http://127.0.0.1:3000/?url=123&name=321
網頁顯示:
網站名:321網站 URL:123
C. nodejs 做http伺服器的時候如何獲取post過來的參數
盡管可以,但是一般不直接用nodejs直接做web server,在node js中常用的web server是express。
在express中,可內以通過req.param('key')來獲取容post回來的參數。
D. 誰幫我寫下nodejs POST收發模塊
0、你的需求不是很明確,你的資料庫是什麼,收到數據後做什麼,發送的又是什麼數據,什麼時候取資料庫數據,什麼時候存資料庫數據,這些你自己理清楚,下面的代碼變化下位置,應該是可以滿足你的需求的。
1、npminstallmysql //nodejs操作mysql資料庫的包網頁鏈接
npminstallasync //nodejs控制同步非同步的包網頁鏈接
npminstall request //nodejs對http進行封裝後的包,比http更好用網頁鏈接
2、下面的思路是:從mysql資料庫取出數據 --> 將資料庫數據和你的某個數據進行對比 --> 將對比結果發送到指定地址
varmysql=require('mysql');
varasync =require('async');
varrequest =require('request ');
varconnection=mysql.createConnection({
host:'localhost',
user:'root',
password:'123456',
database:'aaa'
});
connection.connect();
connection.query('SELECT data FROM tableA',function(error,results,fields){
if(error)throwerror;
var data =results[0];//自己可以列印result看看是什麼,有助於你使用。
console.log('Thedata is:',data);
async.auto({//
checkDifferent: function (cb) {
//checkDifferent函數進行數據對比,具體怎麼對比看你的需求了,再將對比後的數據往下一個函數傳遞,具體內容參考async庫的作用。
cb(null, differentData);
},
postData: function (result, cb) {//發送數據
var differentData = result.checkDifferent//即上個函數得到對比數據
request.post('你的數據即將的URL', {
formData: {
"data": differentData //這里是簡單的例子,具體是否需要headers或者Auth驗證看你自己需求,使用方式,例子,上面都給了網址。
},
json: true,
}, function (err, res, body) {
console.log(body);
return;
});
}
})
});
connection.end();
3、接收數據需要建立伺服器,不清楚你現在是用什麼框架,這里用express做例子。
(1)express的安裝、使用方式自行網路
(2)
app.use('/', routes);//即接收到上面2中的post數據後,在routes中進行數據處理(保存)
(3)保存數據到資料庫
此時我們已經利用express,建立了伺服器,並接收到了數據,資料庫保存跟上面2中的查詢數據是一樣的,只是資料庫語句變成INSERT INTO tableA SET XXX,
varmysql=require('mysql');
varpool=mysql.createPool({
connectionLimit:10,
host:'localhost',
user:'root',
password:'123456',
database:'aaa'
});
pool.query('INSERT INTO tableA SET XXX',function(error,results,fields){
if(error)throwerror;
console.log(results[0]);
});
4、希望對題主有啟發
E. 如何用nodejs搭建web伺服器
創建一個記事本將下面的代碼復制進去 保存為app.js
var http = require('http');//引入響應頭
http.createServer(function (request, response) {
//參數一是與請求相關的對象
//參數二是與響應有關的對象
// 發送 HTTP 頭部
// HTTP 狀態值: 200 : OK
// 內容類型: text/plain
response.writeHead(200, {'Content-Type': 'text/plain'});
// 發送響應數據 "Hello World"
response.end('Hello World\n');
}).listen(8888);//監聽埠
// 終端列印如下信息
console.log('Server running at http://127.0.0.1:8888/');
以下以我的電腦上的路徑為准 我是將app.js 保存在E:\NODE這個文件夾下面
接下來就是運行了打開cmd
第一步:E:
第二步:cd NODE //CD是 命令行改變目錄的命令
第三步:node app.js
這個是運行效果接下來訪問localhost:8888就可以看到hollo word
建議多看一些node的模塊 比如 express和session mysql之類的模塊
F. nodejs post請求和gat請求之間的區別
get是從伺服器上獲取數據,post是向伺服器傳送數據。
2 get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3 對於get方式,伺服器端用Request.QueryString獲取變數的值,對於post方式,伺服器端用Request.Form獲取提交的數據。
4 get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
5 get安全性非常低,post安全性較高。
6 HTTP 定義了與伺服器交互的不同方法,最基本的方法是 GET 和 POST。事實上 GET 適用於多數請求,而保留 POST 僅用於更新站點。根據 HTTP 規范,GET 用於信息獲取,而且應該是 安全的和冪等的。所謂安全的意味著該操作用於獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。冪等的意味著對同一 URL 的多個請求應該返回同樣的結果。完整的定義並不像看起來那樣嚴格。從根本上講,其目標是當用戶打開一個鏈接時,她可以確信從自身的角度來看沒有改變資源。 比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認為是安全的和冪等的,因為它總是返回當前的新聞。反之亦然。POST 請求就不那麼輕鬆了。POST 表示可能改變伺服器上的資源的請求。仍然以新聞站點為例,讀者對文章的註解應該通過 POST 請求實現,因為在註解提交之後站點已經不同了
7 在FORM提交的時候,如果不指定Method,則默認為GET請求,Form中提交的數據將會附加在url之後,以?分開與url分開。字母數字字元原 樣發送,但空格轉換為「+「號,其它符號轉換為%XX,其中XX為該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;GET方式提交的數據最多隻能有1024位元組,而POST則沒有此限制
G. nodejs 怎麼獲取post請求的json數據
前端傳給伺服器的只是json 格式的字元串,使用json_decode,
mixed json_decode ( string $json [, bool $assoc ] )
var_mp(json_decode($json));
var_mp(json_decode($json, true));
如果不帶參數,則返回版為對象
帶上true時,返回數組
foreach($ARR as $k=>$v){
echo 'key='.$k.';value='.$v;
}
單獨處理每個key 和對權應的value就好
H. Nodejs中怎麼獲取HTML中一個form下的所有POST數據
首先獲取http,並創建一個web服務,監聽本地埠1337,這個可以修改,任何未被佔用的埠都可以用,並堅挺data事件和end事件,整個文件保存為app.js
下面這里貼上測試代碼
////////////////app.js///////
var http = require('http');
var server = http.createServer(function(req,res){
if(req.url!=="/favicon.ico"){
req.on('data',function(data){
console.log("伺服器接收到的數據:"+decodeURIComponent(data));
});
req.on("end",function(){
console.log('客戶端請求數據全部接收完畢');
});
}
res.end();
}).listen(1337,"localhost",function(){
console.log("listened");
});
////////////////index.html///////
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Nodejs的data事件與end事件的回調函數測試用頁面</title>
</head>
<body>
<form id= "form1" action = "http://localhost:1337/" method = "post">
姓名:<input type = 'text' name = "name" value ="dragon"><br/>
年齡:<input type = "number" name = "age" value ="25">
<input type = "submit" value =" 提交"/>
</form>
</body>
</html>