首頁 > web前端 > js教程 > 主體

使用node.js分析url輸出檔給客戶端

Y2J
發布: 2017-05-22 11:57:35
原創
1863 人瀏覽過

最近需要完成一個課程設計,被專案經理(組長)分配寫介面功能,下面小編透過本文給大家分享使用使用node搭建小型伺服器的方法,需要的朋友參考下

使用node搭建小型伺服器(其實就是分析url然後輸出檔案給客戶端​​)

最近需要完成一個課程設計,被專案經理(組長)分配寫介面,但總覺得只寫前端的話缺了點什麼,所以想自己寫下後端玩一下。

期間還稍微糾結了一下用什麼語言,本來打算正好學習一下PHP,可後來轉念一想,用nodejs豈不美哉,不僅了解了後台開發,也相當於鞏固了js基礎,一舉兩得,美滋滋。

在學習node的過程中,學到了使用node實作一個伺服器這一塊,感覺是對前面所學模組的一個很好的總結。用到了四個基本的模組fs stream http path

程式碼如下:(內含蹩腳英文註解請見諒)

'use strict'
var url = require('url');
var path = require('path');
var fs = require('fs');
var http = require('http');
//get the current path
//var root = path.resolve('.');//以当前的目录为服务器的根目录
var root = path.resolve(process.argv[2] || '.');//以输入的参数作为服务器的根目录,如果没有输入参数就将当前目录作为服务器根目录
console.log('local root dir :' + root);
//create server
var server = http.createServer(function(request, response) {
  //get the path of URL
  var pathname = url.parse(request.url).pathname;
  //get the local path
  var filepath = path.join(root, pathname);
  //get the file stat and output the request file by callback function
  fs.stat(filepath, function(err, stat) {
    if(!err && stat.isFile()) {
      console.log('200' + request.url);
      response.writeHead(200);
      fs.createReadStream(filepath).pipe(response);//没有必要手动读取文件内容。由于response对象本身是一个Writable Stream,直接用pipe()方法就实现了自动读取文件内容并输出到HTTP响应。
    } else {
      console.log('404' + request.url);
      response.writeHead(404);
      response.end('404 Not Found');
    }
  });
});
server.listen(8080);
console.log('Server is running at http://127.0.0.1:8080/');
登入後複製

對於其中一些函數的解釋:

path.resolve() 路径寻航(这名字不错)
path.resolve([from…], to)
登入後複製

有個解釋很有趣:相當於不斷地呼叫系統的cd指令

eg:

path.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile')
//相当于:
cd foo/bar
cd /tmp/file/
cd ..
cd a/../subfile1
path.join([path1],path[2]...) 路径合并
登入後複製

將所有名稱用path.seq串聯起來,然後用normailze格式化

eg:

path.join('///foo', 'bar', '//baz/asdf', 'quux', '..');
=>'/foo/bar/baz/asdf'
登入後複製

既然提到了normalize

那麼:

格式化路徑path.normalize(p)
將不符合規範的路徑格式化,簡化開發人員中處理各種複雜的路徑判斷

eg:

path.normalize('/foo/bar//baz/asdf/quux/..');
=> '/foo/bar/baz/asdf'
登入後複製

http.response.end()結束相應,告訴客戶端所有訊息已經發送。當所有要傳回的內容發送完畢時,函數必須要被呼叫一次。如果不呼叫函數,那麼客戶端將會永遠處於等待狀態

使用方法:

response.end([data], [encoding])
登入後複製

data end()執行完畢後要輸出的字符,如果指定了data 的值,那就意味著在執行完response.end() 之後,會接著執行一條response.write(data , encoding);

encoding 對應data的字元編碼

【相關推薦】

1. Javacript免費視訊教學

2. JavaScript解決漢字轉拼音的實例詳解

3. 分享15個常用的js正規表示式

#4. 透過ja​​vascript實作搜尋工具列的實例詳解

#5. Javascript中關於async以及awai的用法具體介紹

以上是使用node.js分析url輸出檔給客戶端的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!