利用node構建本地服務


利用node構建本地服務

首先安裝下node.js,地址為https://nodejs.org/en/,然后安裝npm。

node.js的中文api地址http://nodeapi.ucdok.com/#/api/

一些模塊的用法可以在自己的終端試試哦,通過node這個命令進入node.js環境。如下圖

利用node構建本地服務,用到的模塊有http、fs、path着三個模塊,其中http是用來創建服務的;fs時文件模塊,可讀寫等本地文件;path是一套用於處理和轉換文件路徑的工具集(具體見http://nodeapi.ucdok.com/#/api/path.html)。

這個構建的原理跟nginx代理訪問本地頁面是一樣的~,將ip(port)映射到本地的靜態資源的路徑,然后根據url的相對路徑找到資源,有點表達的詞不達意~

說一下簡單的流程

  • 利用http模塊的createServer方法起一個服務(可以把request和response打印出來哦,加深理解),listen實現對端口的監聽
  • 變量staticUrl保存着我們要訪問的靜態資源的路徑。用path解析url得到相對路徑,把staticUrl與之拼接起來就可以得到絕對路徑了,用強大的fs模塊讀取文件,就ok了
  • 有可能url訪問的不適本地的資源~嘿嘿,我們就要做些處理了,類似如404
  • 由於加載的html帶有js img css各種不同類型的文件,用過ajax的就知道我們要設置好請求頭了,不過這里我們是將本地的資源返回給瀏覽器這個客戶段,所以我們要設置好響應頭~就建立了一個一個公共的mine.js用來存放文件類型

不多說啦,那就直接看下面的代碼吧~

var http = require('http');
var fs = require('fs'); 
var path = require('path');
var mine = require('./mine').types;  //content-type格式
//靜態資源的路徑
var staticUrl = '/Users/admin/Documents/materials/demo/excise';
var server = http.createServer(function(req,res){
    //req,res均為對象,req是http.IncomingMessage的一個實例,res是http.ServerResponse的一個實例
    //console.log(res);
    var url = req.url; 
    //瀏覽器輸入localhost:9000/index.html, 那url == '/index.html'
    //console.log(url);
    var file = staticUrl + url,
        type = path.extname(url);  //path.extname 返回路徑中文件的擴展名
    //console.log(type)
    type = type ? type.split('.')[1] : 'unknown'; 
    fs.readFile(file , function(err,data){
        if(err){
            console.log('訪問'+staticUrl+req.url+'出錯');
            res.writeHeader(404,{
                'content-type' : 'text/html;charset="utf-8"'
            });
            res.write('<h1>404錯誤</h1><p>你要找的頁面不存在</p>');
        }else{
            res.writeHeader(200,{
                'content-type' :  mine[type] || 'text/html;charset="utf-8"'
            });
            res.write(data);  //將index.html顯示在瀏覽器(客服端)
        }
        res.end();
    });
}).listen(9000);

console.log('服務器開啟成功\n\n訪問路徑為http://localhost:9000/index.html\n');

使用過ajax的筒靴肯定知道contentType,這是對文件類型的設置。由於我們構建的是一個項目的服務,那么文件類型就多了起來,所以建立一個公共的mine.js用來存放文件類型

// 數據格式標簽mime的主要類型
// 參考http://www.w3school.com.cn/media/media_mimeref.asp
/*
    application/
    text/
    image/
    audio/
    video/
    chemical/
    message/
    multipart/
    model/
*/

exports.types = {
  "html": "text/html",
  "xml": "text/xml",
  "js": "text/javascript",
  "css": "text/css",
  "json": "application/json",
  "txt": "text/plain",
  "pdf": "application/pdf",
  "doc": "application/msword",
  "xls": "application/vnd.ms-excel",
  "ico": "image/x-icon",
  "jpeg": "image/jpeg",
  "jpg": "image/jpeg",
  "png": "image/png",
  "bmp": "image/bmp",
  "svg": "image/svg+xml",
  "tiff": "image/tiff",
  "gif": "image/gif",
  "swf": "application/x-shockwave-flash",
  "wav": "audio/x-wav",
  "wma": "audio/x-ms-wma",
  "mp3": "audio/mpeg",
  "wmv": "video/x-ms-wmv",
  "avi": "video/x-msvideo",
  "gz": "application/x-gzip",
  "manifest": "text/cache-manifest"
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM