Node.js Everywhere 咱們能夠從官網的介紹來分析:node中文網 | node引文網javascript
Node.js® 是一個基於 Chrome V8 引擎 的 JavaScript 運行時。html
node.js使用事件驅動、非阻塞I/O模型使得其輕量、高效。前端
node.js的包生態系統,
npm
是世界上最大的開源庫生態系統。java
寫一個簡單的js文件,node
var str = 'hello node'; conole.log(str);
隨意命名,好比hello.js。(注意,不能使用node.js命名,不然會打開文本而不會解析執行) 而後在文件存放處打開命令行,使用node指令執行便可:git
咱們已經知道Node能夠解析js文件了,而js也能夠進行web服務器搭建,因此咱們只須要使用Node.js提供的相關api來搭建服務器,再用命令行去解析執行便可。web
//相似咱們須要使用某些對象同樣,須要使用關鍵字進行New,在Node.js中咱們使用require()方法進行模塊加載(Node中的模塊就至關於具備特殊功能的對象) //要構建一個web服務器須要使用http模塊 var http = require('http'); //使用http模塊建立webServer var server = http.createServer(); //設置端口號 server.listen(8888,function(){ console.log("端口號啓用成功!"); }); //服務器request事件:請求時觸發 server.on('request',function(request,response){ console.log("已經收到請求!"+'請求路徑爲:'+request.url);//一些請求信息 response.write("雷好,我係~渣渣輝!");//響應 response.end("該幹嗎幹嗎去");//告知瀏覽器響應結束,沒必要等待 }); console.log("webServer at localhost://88888");
而後咱們打開瀏覽器輸入:localhost://8888或127.0.0.1://8888就能夠訪問了。 總結一下:npm
require()
方法進行裁入。createServer([options][, requestListener])
方法能夠建立並返回一個服務器對象,而後咱們就能夠進行相應設置。listen()
方法爲服務器設置端口號。request事件
在瀏覽器請求該服務器時觸發,利用回調函數能夠進行request處理和response響應。response.end()
方法告知瀏覽器響應結束,不然瀏覽器會一直等待響應。Node.js爲JavaScript提供了不少服務器級別的api,這些api絕大多數都被包裝到了一個具名的核心模塊中,好比: 文件操做的fs
(File System)模塊、http
服務建立的http模塊、路勁操做的path
模塊、操做系統信息的os
模塊等。 而咱們須要使用這些核心模塊就須要使用require()
方法進行獲取。api
Node.js中的模塊有三種:瀏覽器
require()
方法解析執行文件模塊。 好比我如今有如下三個js文件://a.js文件 console.log('a start'); require('./b.js');//解析執行b.js console.log('a end');
//b.js文件 console.log('b start'); require('./c.js');//解析執行c.js console.log('b end');
//c.js文件 console.log('CCCCCC');
執行結果以下:
值得注意的點:
./
;文件後綴能夠省略。既然每一個文件中的變量互不影響,那麼若是咱們須要使用到某個文件內部的變量時又該如何獲取呢?其實require()方法除了解析執行文件模塊以外還能返回文件模塊自帶的exports對象
,該對象默認爲空{}。 因此咱們只須要在文件模塊中將須要處處的值傳入exports對象中便可:
var b = require('./b');//加載b文件 console.log(b);//輸出b模塊導出的對象
var str = '雷好,我係渣渣輝'; function add(x,y){ return x+y; } exports.str = str; exports.add = add;
執行:
上文中咱們響應的中文可能在瀏覽器中顯示是亂碼,這是由於Node.js默認的響應類型是utf-8,而瀏覽器不知道,若是瀏覽器默認編碼不是utf-8就會產生亂碼。 response對象在響應的時候能夠設置相關參數,好比響應頭,響應內容的類型,而編碼方式的信息就由Content-Type
來設置。
//設置響應頭參數。響應類型爲普通文本,編碼方式爲utf-8 response.setHeader('Content-Type','text/plain;charset=utf-8');
示例:
var http = require('http'); var server = http.createServer(); server.listen(8888); //服務器request事件:請求時觸發 server.on('request',function(request,response){ var url = request.url; var str = '<h1>若是你看得清我,說明我沒有亂碼!</h1>' if(url == '/plain'){ response.setHeader('Content-Type','text/plain;charset=utf-8');//返回普通文本 }else if(url == '/html'){ response.setHeader('Content-Type','text/html;charset=utf-8');//返回html文本 }else{ str = 'please use url /plain or /html and get the response!' } response.end(str); }); console.log("webServer running at localhost://88888");
fs全稱File System,用於操做文件,基本的兩個功能爲爲讀文件和寫文件。
readFile()
//使用require方法加載fs模塊 var fs = require('fs'); fs.readFile('hello.js',function(error,data){ if(error){ console.log('文件讀取失敗!'); return; } console.log(data.toString()); });
二進制數據
;當文件讀取失敗時,error返回包含錯誤信息的對象,data返回undefined。writeFile()
var fs = require('fs'); fs.writeFile('hello.txt','大噶好,I\'m 渣渣輝',function(error){ if(!error){ console.log("文件寫入成功!"); }else{ console.log("文件寫入失敗!"); } });
邏輯很簡單,將讀取的文件數據寫入新的文件中便可
var fs = require('fs'); fs.readFile('jinx.jpeg',function(error,data){ if(error){ console.log('文件讀取失敗!'); }else{ //將讀取的數據寫入新的文件中 fs.writeFile('jinx(copy).jpeg',data,function(error){ if(!error){ console.log("文件寫入成功!"); }else{ console.log("文件寫入失敗!"); } }); } });
因爲文件過多這裏再也不展現,假設這是一個本地項目,
咱們但願使用Node.js來搭建服務器,並在服務器上運行咱們的項目。 你們服務器很簡單,關鍵點在於咱們須要根據請求路勁來加載相應的資源文件,這些上面的案例都能實現。相似這樣:
咱們根據request.url
使用fs核心模塊
來加載文件,並設置相應的Content-Type
在瀏覽器中正確裁入文件類型。