1.什么是Node
node是js語言的服務器運行環境(類似于php和apache)
nodejs提供大量的工具庫,使得javascirpt可以調用操作系統級別的api。
node采用谷歌的v8引擎(javascipt語言解釋器),速度非常快跟js環境不一樣,一個是運行在服務器,一個運行在客戶端
node是一個基于事件驅動和異步io的服務器Javascript環境
還有一些基礎:
回調:異步編程的基本方法,采用后續函數傳遞的方式,把后續的處理函數作為參數進行執行
同步和異步(阻塞非阻塞):Ajax的時候說過
單線程和多線程
單線程按順序執行,多線程可以同時執行
2.一個簡單Node實例
建立一個文件node.js
function sum(a,b) {
return a+b;
}
console.log(sum(5,6));
在控制臺下運行node node.js就會輸出結果11
3.node模塊化實例
建立一個require.js文件,引入當前目錄下的home.js文件
var home = require("./home.js");//點斜杠表示在當前目錄下找該文件。若沒有./則會默認在當前目錄的node_modules目錄下查找home.js文件,這種情況下需要在node_modules里面建立該文件,若沒有后綴默認找的是文件夾里面的index文件
home.show();//引入的home.js里面的方法
console.log(sum(5,6));
引入的home.js文件
function show() {
console.log("模塊加載成功!");
}
exports.show = show;//防止命名沖突。home指定外部模塊exports等于show()方法,show()方法通過exports返回require.js。類似return一個函數
//或者module.exports.show= show();
//相當于定義了var exports =module.exports;
在控制臺運行node 2.require顯示“模塊加載成功”
4.http模塊應用實例
node自帶有很多模塊,其中包括http模塊,使用之前需要reuqire加載進來
var http = require("http");
//req:請求
//res:response響應
var server = http.createServer(function(req,res) {//創建服務器對象,包含回調函數及兩個參數req和res
console.log(req.url);//返回請求地址
//返回頁面的頭文件,設置編碼等(防止可能返回的亂碼)
res.writeHead(200,{"Conten-type":"text/htmlcharset=utf-8"})
//res.write("響應的內容");
res.end("<a href=''###'>響應結束</a>");
})
server.listen(8080,function () {
console.log("開啟成功:http://local:8080");
})
在終端運行node 3.http,顯示開啟成功:http://localhost:8080,打開網頁顯示res.end的結果,若修改了代碼需要重啟服務器
如果我們在瀏覽器地址欄的http://localhost:8080后面加上/等符號回車,可以看到console.log(req.url);在控制臺打印出輸入的相應的符號,由此可以可以用輸入的/地址來判斷用戶要訪問的頁面來給它顯示需要的頁面
那么js文件可以這樣寫
var http = require("http");
/*
*req:request請求
*res:response響應
*res.writeHead設置請求頭
* */
var server = http.createServer(function(req,res) {
console.log(req.url);
if(req.url=="/" || req.url=="/index"){//訪問主頁用斜杠或者/index
res.writeHead(200,{"Content-type":"text/html;charset=utf-8"});
res.end("首頁");
}else if(req.url=="/login"){//訪問login頁面
res.writeHead(200,{"Content-type":"text/html;charset=utf-8"});
res.end("登陸頁");
}else{//若用戶訪問的頁面不存在,返回404結果
res.writeHead(404,{"Content-type":"text/html;charset=utf-8"});
res.end("沒有找到該頁面");
}
})
server.listen(8080,function () {
console.log("開啟成功:http://localhost:8080");
})
重啟服務器,瀏覽器訪問localhost:8080,默認顯示主頁返回結果“首頁”,地址后面加上/login返回“登陸”,嘗試訪問其他頁面返回“404,沒有找到該頁面”
5.url模塊應用實例
node里面的url模塊用于處理地址,根據地址獲取請求信息,比如發送姓名和年齡
var http = require("http");
var url = require("url");
var server = http.createServer(function(req,res) {
// url.parse第二個參數bol 如果true返回對象的query屬性會轉為json對象
var urlObj = url.parse(req.url,true);
console.log(urlObj);//終端返回請求的地址信息
res.end("姓名:"+urlObj.query.name+";年齡:"+urlObj.query.age);
})
server.listen(8080,function () {
console.log("開啟成功:http://localhost:8080");
})
測試時在終端開始服務器,在瀏覽器地址欄輸入http://localhost:8080/?name=abc&age=12,在瀏覽器中就會返回“姓名:abc;年齡:12”信息。此方式為get請求方式,post請求方式如下:index.html包含form表單文件:
<formaction="http://localhost:8080" method="post">
<input type="text" name="user">
<input type="text"name="pwd">
<input type="submit">
</form>
js文件:
var http = require("http");
var fs = require("fs");
var server =http.createServer(function(req,res){
//獲取POST傳送的數據
req.on("data",function (data) {
console.log(data.toString());
})
var url = req.url;
// "/" "index.html"
if(url=="/"){
url = "/index.html";
}
var isFile = false;
//判斷訪問的地址文件是否存在
var bol = fs.existsSync("www"+url);
if(bol){
console.log("www"+url)
var stat = fs.lstatSync("www"+url);
var isFile = stat.isFile()
}
if(isFile){
// var rs = fs.createReadStream("www"+url);
// rs.pipe(res);
var con = fs.readFileSync("www"+url);
res.end(con);
}else{
res.writeHead(404,{"Content-type":"text/html;charset=utf-8"})
res.end("沒有找到該頁面");
}
});
server.listen(8080,function(){
console.log('開啟成功:http://localhost:8080')
});
更多模塊請訪問nodejs手冊http://nodejs.cn/
新聞熱點
疑難解答