欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

搭建簡單的nodejs http服務(wù)器詳解

 更新時間:2017年03月09日 15:00:24   作者:LWTao  
本篇文章主要介紹了搭建簡單的nodejs服務(wù)器詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

搭建簡單的nodejs服務(wù)器

通過一些簡單配置我們就可以搭建一臺基于nodejs的http服務(wù)器

通過switch配置url路由的方法

// 這是一個簡單的Node HTTP服務(wù)器,能處理當(dāng)前目錄的文件
// 并能實現(xiàn)兩種特殊的URL用于測試
// 用HTTP://localhost:8000或http://127.0.0.1:8000連接這個服務(wù)器

// 首先加載所有需要用到的模塊
var http = require('http');    // 加載http服務(wù)api模塊
var fs = require('fs');      // 加載fs文件服務(wù)api模塊
var server = new http.Server();  // 創(chuàng)建新的HTTP服務(wù)器
var urlapi = require('url');    // 創(chuàng)建url路由api模塊
server.listen(8000);       // 監(jiān)聽端口8000

// 使用on方法注冊事件處理,該事件一直被監(jiān)聽,任何的請求都會進入回調(diào)函數(shù),執(zhí)行相應(yīng)的操作
server.on('request', function(request, response) { // 當(dāng)有request請求的時候觸發(fā)處理函數(shù)  
  // 解析請求的URL
  var url = urlapi.parse(request.url);

  //監(jiān)聽請求的網(wǎng)站,以當(dāng)前腳本目錄為根目錄的url地址
  console.log(url.pathname);

  // 特殊URL會讓服務(wù)器在發(fā)送響應(yīng)前先等待
  switch(url.pathname) {  //判斷請求的路徑信息
  case ''||'/' : // 處理請求的網(wǎng)站根目錄,指定加載對應(yīng)的文件夾,一般以根目錄的index.html為默認(rèn),nodejs是高效流處理的方案,也可以通過配置文件來配置
    fs.readFile("./page/index.html", function(err, content){ //打開請求的文件
      if(err) { //輸出錯誤信息,也可以自定義錯誤信息
        response.writeHead(404, { 'Content-Type':'text/plain; charset="UTF-8"' });
        response.write(err.message);
        response.end();
      } else { //請求成功返回數(shù)據(jù)
        response.writeHead(200, { 'Content-Type' : 'text/html; charset=UTF-8' }); //告訴相應(yīng)頭文件,返回數(shù)據(jù)的類型
        response.write(content); //返回的內(nèi)容,有時候還會加上buter數(shù)據(jù)類型
        response.end(); //結(jié)束響應(yīng),不寫的話,會一直處于響應(yīng)狀態(tài),頁面不會顯示內(nèi)容
      }
    });
    break;
  case '/test/delay':// 此處用于模擬緩慢的網(wǎng)絡(luò)連接
    // 使用查詢字符串來獲取延遲時長,或者2000毫秒
    var delay = parseInt(url.query) || 2000;
    // 設(shè)置響應(yīng)狀態(tài)和頭
    response.writeHead(200, {'Content-type':'text/plain; charset=UTF-8'});
    // 立即開始編寫響應(yīng)主體
    response.write('Sleeping for' + delay + ' milliseconds...');
    // 在之后調(diào)用的另一個函數(shù)中完成響應(yīng)
    setTimeout(function(){
      response.write('done.');
      response.end();
    }, delay);
    break;

  case '/test/mirror':// 如果請求是test/mirror,則原文返回它
    // 響應(yīng)狀態(tài)和頭
    response.writeHead(200, {'Content-type':'text/plain; charset=UTF-8'});
    // 用請求的內(nèi)容開始編寫響應(yīng)主體
    response.write(request.mothod + ' ' + request.url + ' HTTP/' + request.httpVersion + '\r\n');
    // 所有的請求頭
    for (var h in request.headers) {
      response.write(h + ':' + request.headers[h] + '\r\n');
    }
    response.write('\r\n');// 使用額外的空白行來結(jié)束頭
    // 在這些事件處理程序函數(shù)中完成響應(yīng)
    // 當(dāng)請求主體的數(shù)據(jù)塊完成時,把其寫入響應(yīng)中
    request.on('data', function(chunk) { response.write(chunk); });
    // 當(dāng)請求結(jié)束時,響應(yīng)也完成
    request.on('end', function(chunk){ response.end(); });
    break;

  case '/json' : // 模擬JSON數(shù)據(jù)返回
    // 響應(yīng)狀態(tài)和頭
    response.writeHead(200, {'Content-type':'application/json; charset=UTF-8'});
    response.write(JSON.stringify({test:'success'}));
    response.end();
    break;

  default:// 處理來自本地目錄的文件,主要是一些靜態(tài)資源文件,搭建靜態(tài)服務(wù)器還有其他的方法
    var filename = url.pathname.substring(1);  // 去掉前導(dǎo)'/'
    var type = getType(filename.substring(filename.lastIndexOf('.')+1));
    console.log(filename); //取得文件類型 css  js ....
    // 異步讀取文件,并將內(nèi)容作為單獨的數(shù)據(jù)模塊傳給回調(diào)函數(shù)
    // 對于確實很大的文件,使用流API fs.createReadStream()更好
    fs.readFile(filename, function(err, content){
      if(err) {
        response.writeHead(404, { 'Content-Type':'text/plain; charset="UTF-8"' });
        response.write(err.message);
        response.end();
      } else {
        response.writeHead(200, { 'Content-Type' : type });
        response.write(content);
        response.end();
      }
    });
    break;
  }   
});

//這里定義了一個用來判斷文件類型的函數(shù)
function getType(endTag){
  var type=null;
  switch(endTag){
  case 'html' :
     type = 'text/html; charset=UTF-8';
    break;
  case 'htm' :
    type = 'text/html; charset=UTF-8';
    break;
  case 'js' : 
    type = 'application/javascript; charset="UTF-8"';
    break;
  case 'css' :
    type = 'text/css; charset="UTF-8"';
    break;
  case 'txt' :
    type = 'text/plain; charset="UTF-8"';
    break;
  case 'manifest' :
    type = 'text/cache-manifest; charset="UTF-8"';
    break;
  default :
    type = 'application/octet-stream';
    break;
  }
  return type;
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js實現(xiàn)批量替換文件內(nèi)容示例

    Node.js實現(xiàn)批量替換文件內(nèi)容示例

    這篇文章主要為大家介紹了Node.js實現(xiàn)批量替換文件內(nèi)容示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Koa日志中間件封裝開發(fā)詳解

    Koa日志中間件封裝開發(fā)詳解

    這篇文章主要介紹了Koa日志中間件封裝開發(fā)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • nodejs的http和https下載遠程資源post數(shù)據(jù)實例

    nodejs的http和https下載遠程資源post數(shù)據(jù)實例

    這篇文章主要為大家介紹了nodejs的http和https下載遠程資源post數(shù)據(jù)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Node.js開發(fā)之套接字(socket)編程入門示例

    Node.js開發(fā)之套接字(socket)編程入門示例

    這篇文章主要介紹了Node.js開發(fā)之套接字(socket)編程,結(jié)合簡單實例形式分析了node.js套接字socket客戶端與服務(wù)器端相關(guān)實現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-11-11
  • 使用nodejs中httpProxy代理時候出現(xiàn)404異常的解決方法

    使用nodejs中httpProxy代理時候出現(xiàn)404異常的解決方法

    下面小編就為大家?guī)硪黄褂胣odejs中httpProxy代理時候出現(xiàn)404異常的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • 淺談Node框架接入ELK實踐總結(jié)

    淺談Node框架接入ELK實踐總結(jié)

    這篇文章主要介紹了淺談Node框架接入ELK實踐總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • express框架通過ejs模板渲染輸出頁面實例分析

    express框架通過ejs模板渲染輸出頁面實例分析

    這篇文章主要介紹了express框架通過ejs模板渲染輸出頁面的方法,結(jié)合實例形式分析了express框架使用ejs模版引擎渲染輸出的相關(guān)操作技巧與使用注意事項,需要的朋友可以參考下
    2023-05-05
  • express提供http服務(wù)功能實現(xiàn)示例

    express提供http服務(wù)功能實現(xiàn)示例

    這篇文章主要為大家介紹了express提供http服務(wù)功能實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • node終端里如何連接mysql數(shù)據(jù)庫并進行sql查詢

    node終端里如何連接mysql數(shù)據(jù)庫并進行sql查詢

    這篇文章主要為大家介紹了node終端里如何連接mysql數(shù)據(jù)庫并進行sql查詢,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • nodejs前端模板引擎swig入門詳解

    nodejs前端模板引擎swig入門詳解

    這篇文章主要介紹了nodejs前端模板引擎swig入門詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05

最新評論