最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

輕松創(chuàng)建nodejs服務(wù)器(10):處理POST請求

 更新時(shí)間:2014年12月18日 11:29:13   投稿:junjie  
這篇文章主要介紹了輕松創(chuàng)建nodejs服務(wù)器(10):處理POST請求,本文告訴你如何實(shí)現(xiàn)在node.js中處理POST請求,需要的朋友可以參考下

目前為止,我們做的服務(wù)器沒有實(shí)際的用處,接下來我們開始實(shí)現(xiàn)一些實(shí)際有用的功能。

我們要做的是:用戶選擇一個(gè)文件,上傳該文件,然后在瀏覽器中看到上傳的文件。

首先我們需要一個(gè)文本區(qū)(textarea)供用戶輸入內(nèi)容,然后通過POST請求提交給服務(wù)器。

我們在start事件處理器里添加代碼,requestHandlers.js修改如下:

復(fù)制代碼 代碼如下:

function start(response) {
 console.log("Request handler 'start' was called.");
 var body = '<html>'+ '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';
 response.writeHead(200, {"Content-Type": "text/html"});
 response.write(body);
 response.end();
}
function upload(response) {
 console.log("Request handler 'upload' was called.");
 response.writeHead(200, {"Content-Type": "text/plain"});
 response.write("Hello Upload");
 response.end();
}
exports.start = start;
exports.upload = upload;

通過在瀏覽器中訪問http://localhost:8888/start就可以看到效果了。

接下來我們要實(shí)現(xiàn)當(dāng)用戶提交表單時(shí),觸發(fā)/upload請求處理程序處理POST請求。

為了使整個(gè)過程非阻塞,Node.js會(huì)將POST數(shù)據(jù)拆分成很多小的數(shù)據(jù)塊,然后通過觸發(fā)特定的事件,將這些小數(shù)據(jù)塊傳遞給回調(diào)函數(shù)。這里的特定的事件有data事件(表示新的小數(shù)據(jù)塊到達(dá)了)以及end事件(表示所有的數(shù)據(jù)都已經(jīng)接收完畢)。

我們通過在request對象上注冊監(jiān)聽器(listener) 來實(shí)現(xiàn)。這里的 request對象是每次接收到HTTP請求時(shí)候,都會(huì)把該對象傳遞給onRequest回調(diào)函數(shù)。

我們把代碼放在服務(wù)器里,server.js修改如下:

復(fù)制代碼 代碼如下:

var http = require("http");
var url = require("url");
function start(route, handle) {
 function onRequest(request, response) {
  var postData = "";
  var pathname = url.parse(request.url).pathname;
  console.log("Request for " + pathname + " received.");
  request.setEncoding("utf8");
  request.addListener("data", function(postDataChunk) {
   postData += postDataChunk;
   console.log("Received POST data chunk '"+ postDataChunk + "'.");
  });
  request.addListener("end", function() {
   route(handle, pathname, response, postData);
  });
 }
 http.createServer(onRequest).listen(8888);
 console.log("Server has started.");
}
exports.start = start;

上述代碼做了三件事情: 首先,我們設(shè)置了接收數(shù)據(jù)的編碼格式為UTF-8,然后注冊了“data”事件的監(jiān)聽器,用于收集每次接收到的新數(shù)據(jù)塊,并將其賦值給postData 變量,最后,我們將請求路由的調(diào)用移到end事件處理程序中,以確保它只會(huì)當(dāng)所有數(shù)據(jù)接收完畢后才觸發(fā),并且只觸發(fā)一次。我們同時(shí)還把POST數(shù)據(jù)傳遞給請求路由,因?yàn)檫@些數(shù)據(jù),請求處理程序會(huì)用到。

接下來在/upload頁面,展示用戶輸入的內(nèi)

我們來改一下 router.js:

復(fù)制代碼 代碼如下:

function route(handle, pathname, response, postData) {
 console.log("About to route a request for " + pathname);
 if (typeof handle[pathname] === 'function') {
  handle[pathname](response, postData);
 } else {
  console.log("No request handler found for " + pathname);
  response.writeHead(404, {"Content-Type": "text/plain"});
  response.write("404 Not found");
  response.end();
 }
}
exports.route = route;

然后,在requestHandlers.js中,我們將數(shù)據(jù)包含在對upload請求的響應(yīng)中:

復(fù)制代碼 代碼如下:

function start(response, postData) {
 console.log("Request handler 'start' was called.");
 var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';
 response.writeHead(200, {"Content-Type": "text/html"});
 response.write(body);
 response.end();
}
function upload(response, postData) {
 console.log("Request handler 'upload' was called.");
 response.writeHead(200, {"Content-Type": "text/plain"});
 response.write("You've sent: " + postData);
 response.end();
}
exports.start = start;
exports.upload = upload;

我們最后要做的是: 當(dāng)前我們是把請求的整個(gè)消息體傳遞給了請求路由和請求處理程序。我們應(yīng)該只把POST數(shù)據(jù)中,我們感興趣的部分傳遞給請求路由和請求處理程序。在我們這個(gè)例子中,我們感興趣的其實(shí)只是text字段。

我們可以使用此前介紹過的querystring模塊來實(shí)現(xiàn):

復(fù)制代碼 代碼如下:

var querystring = require("querystring");
function start(response, postData) {
 console.log("Request handler 'start' was called.");
 var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" method="post">'+
    '<textarea name="text" rows="20" cols="60"></textarea>'+
    '<input type="submit" value="Submit text" />'+
    '</form>'+
    '</body>'+
    '</html>';
 response.writeHead(200, {"Content-Type": "text/html"});
 response.write(body);
 response.end();
}
function upload(response, postData) {
 console.log("Request handler 'upload' was called.");
 response.writeHead(200, {"Content-Type": "text/plain"});
 response.write("You've sent the text: "+ querystring.parse(postData).text);
 response.end();
}
exports.start = start;
exports.upload = upload;

好了,以上就是關(guān)于處理POST數(shù)據(jù)的全部內(nèi)容。

下一節(jié),我們將實(shí)現(xiàn)圖片上傳的功能。

相關(guān)文章

  • nodejs對文件中的圖片進(jìn)行歸類操作示例

    nodejs對文件中的圖片進(jìn)行歸類操作示例

    這篇文章主要為大家介紹了nodejs對文件中的圖片進(jìn)行歸類的實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 切換到淘寶最新npm鏡像源的全面指南(支持 Windows、macOS 和多種 Linux 發(fā)行版)

    切換到淘寶最新npm鏡像源的全面指南(支持 Windows、macOS 和多種 Linux

    在開發(fā)過程中,npm 是前端開發(fā)者不可或缺的工具,但對于國內(nèi)的開發(fā)者來說,npm 官方源在下載速度上存在一定的瓶頸,本文將詳細(xì)介紹如何在 Windows、macOS 以及各類 Linux 發(fā)行版上切換到淘寶的 npm 鏡像源,需要的朋友可以參考下
    2025-03-03
  • 使用puppeteer破解極驗(yàn)的滑動(dòng)驗(yàn)證碼

    使用puppeteer破解極驗(yàn)的滑動(dòng)驗(yàn)證碼

    這篇文章主要介紹了利用puppeteer破解極驗(yàn)的滑動(dòng)驗(yàn)證功能,基本流程代碼實(shí)現(xiàn)給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-02-02
  • 淺談Node.js中的定時(shí)器

    淺談Node.js中的定時(shí)器

    本文給大家分享的是Node.js中的定時(shí)器的相關(guān)資料,十分的全面細(xì)致,有需要的小伙伴可以參考下。
    2015-06-06
  • 前端必會(huì)的nodejs知識工具模塊使用示例詳解

    前端必會(huì)的nodejs知識工具模塊使用示例詳解

    這篇文章主要為大家介紹了前端必會(huì)的nodejs知識工具模塊使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • nodejs nedb 封裝庫與使用方法示例

    nodejs nedb 封裝庫與使用方法示例

    這篇文章主要介紹了nodejs nedb 封裝庫與使用方法,結(jié)合實(shí)例形式分析了nodejs nedb.js封裝庫的定義與使用技巧,需要的朋友可以參考下
    2020-02-02
  • nodejs文件操作模塊FS(File System)常用函數(shù)簡明總結(jié)

    nodejs文件操作模塊FS(File System)常用函數(shù)簡明總結(jié)

    這篇文章主要介紹了nodejs文件操作模塊FS(File System)常用函數(shù)簡明總結(jié),對FS模塊的大部份異步函數(shù)做了介紹,而且用中文注釋,這下用起來方便了,需要的朋友可以參考下
    2014-06-06
  • NodeJS實(shí)現(xiàn)跨域的方法(使用示例)

    NodeJS實(shí)現(xiàn)跨域的方法(使用示例)

    CORS是一種 W3C 標(biāo)準(zhǔn),它使用額外的 HTTP 頭來告訴瀏覽器讓運(yùn)行在一個(gè) origin (domain) 上的Web應(yīng)用被準(zhǔn)許訪問來自不同源服務(wù)器上的指定的資源,這篇文章主要介紹了NodeJS實(shí)現(xiàn)跨域的方法,需要的朋友可以參考下
    2024-05-05
  • nodejs中art-template模板語法的引入及沖突解決方案

    nodejs中art-template模板語法的引入及沖突解決方案

    本篇文章主要介紹了nodejs中art-template模板語法的引入及沖突解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Mongoose學(xué)習(xí)全面理解(推薦)

    Mongoose學(xué)習(xí)全面理解(推薦)

    本篇文章主要介紹了Mongoose全面理解,詳細(xì)的介紹了mongoose連接數(shù)據(jù)庫,查找讀取數(shù)據(jù)和數(shù)據(jù)驗(yàn)證等,有興趣的可以了解一下。
    2017-01-01

最新評論

泗水县| 天长市| 山丹县| 信阳市| 前郭尔| 云浮市| 巴彦县| 元江| 公主岭市| 盐池县| 和政县| 鄂托克旗| 中阳县| 泊头市| 临桂县| 德庆县| 广饶县| 广平县| 海兴县| 梨树县| 盐边县| 仪征市| 河北省| 高陵县| 三明市| 高碑店市| 信宜市| 陇西县| 南平市| 呼玛县| 安塞县| 三台县| 独山县| 鄂尔多斯市| 沙坪坝区| 长武县| 宣城市| 凯里市| 无锡市| 平陆县| 济源市|