node (1)

1、介紹css

Node.js是一個讓JavaScript運行在服務器端的開發平臺,它讓JavaScript的觸角伸到了服務器端。html

Node彷佛有點不一樣:node

Node.js不是一種獨立的語言,與PHPJSPPythonPerlRuby的「既是語言,也是平臺」不一樣,Node.js的使用JavaScript進行編程,運行在JavaScript引擎上(V8)。程序員

● 與PHPJSP等相比,Node.js跳過了ApacheNginxIISHTTP服務器,它本身不用建設在任何服務器軟件之上。Node.js的許多設計理念與經典架構(LAMP)有着很大的不一樣,能夠提供強大的伸縮能力。apache

Node.js自身哲學,是花最小的硬件成本,追求更高的併發,更高的處理性能。npm

2、安裝nodejs編程

 Node的官網地址:https://nodejs.orgjson

Node的中文網站:http://nodejs.cn/api/api

提示:①若是你的電腦是32位的,你就下載32,通常是64的通常就是下載MSI版本的64位的就能夠。數組

           ②無腦下一步  node -v 查看的是node的版本號

環境變量的設置

window+R->輸入CMD

②找打計算機此電腦點擊-屬性

③點擊高級系統設置

④選擇環境變量的設置按鈕

⑤剛纔是作了一次實驗,給QQ.exe程序的文件路徑設置爲環境變量,QQ這個指令做爲系統級別的指令,你就可使用了。可是Node.exe程序,在你安裝的時候已經自動給你這是環境變量,所以node如今做爲系統級別的指令,你可以使用node;若是是window7添加環境變量的時候,多個路徑用分號隔開);

 

3、node的基本使用 

一、提示:將JS文件直接拖拽到瀏覽器,你會發現執行不了,由於JS須要宿主環境,我們已經知道的宿主環境是靜態頁面。

for(var i = 0;i<10;i++){

    if(i%2==0){

        console.log(i);

    }

}

二、宿主環境-node平臺

第一步:打開命令終端 window+R

輸入CMD命令進入;

第二步:輸入cd(change directory) +空格 +文件夾的路徑(進入到某一個文件夾)

第三步:先運行那個JS文件你就node

     node +js文件名

提示:按住shift+右鍵選擇(在此處打開命令窗口),想執行誰就node誰   node +tab(補齊js文件)

 

注意:js文件當中有windowdocument對象嗎?

如今我們的JS文件沒有window對象,也沒有document,也沒有getElementByid這些東西都沒有了,所以如今的JS宿主環境是node,不是任何的瀏覽器,由於瀏覽器纔有windowdocument

 

②如今的JS文件你能夠作哪些操做?

 

   基本的JS語法均可使用,變量、循環語句、條件語句,函數;也就說JS語法的核心部分均可以使用;

 

   若是你的JS文件發生變化,你須要再次保存,再次node才能執行;

4、搭建服務器

1初識node服務器

 

//須要引入內置的HTTP模塊
var http = require("http");
//返回的http對象有一個createServer方法,這個方法能夠建立服務器,傳遞是一個callBack
//有兩個形參 req(請求) res(response)
 var server= http.createServer(function  (req,res) {
       //輸出一些東西
       //從新設置一下字符集
       res.setHeader("Content-type","text/html;charset=utf8");
       res.write("你好,我是node.js,歡迎訪問個人服務器");
       res.write("<br/>");
       res.write("<h1>我是h1標籤</h1>");
       res.write("你好,我是node.js,歡迎訪問個人服務器");
       res.write("你好,我是node.js,歡迎訪問個人服務器");
       res.write("你好,我是node.js,歡迎訪問個人服務器");
       res.write("你好,我是node.js,歡迎訪問個人服務器");
       res.end("Hello Word");

 });
 //監聽端口號   0-6萬多,可是我們的apache已經佔用80
 server.listen(3000);

注意: node一個特性:事件的驅動,當你訪問服務器的時候,服務才執行本身的回調函數;

       ②用Node生生的建立了一個服務器;哪怕用戶沒有node環境也能夠訪問個人服務器。

       ③若是你的服務器開啓,那麼你的終端窗口不能關閉;

       ④res.writeres.end這兩個方法當中不能出現數字,只能是字符串;

       ⑤當你改變js文件的時候,你會發現我們CMD窗口,光標一直掛起,ctr+c打破鼠標掛起的狀態;

       ⑥res.setHeader("Content-type","text/html;charset=utf8");這是一下響應頭;

       ⑦write方法能夠有多個,可是必需要有一個end的法方法,不然會一直加載;

二、外置頁面

//內置的http模塊
var http = require("http");

//須要一個fs內置模塊(file)server)
var fs = require("fs");

http.createServer(function  (req,res) {
     //系統內置的fs模塊有一個readFile一個方法
      fs.readFile("./public/1.wangjunka.html",function  (err,data) {
            res.end(data);
      })
}).listen(3000);

 

提示:①之後若是操做的是文件的操做,都是使用的內置fs,readFile(path,callBack)

3.路由(router)的學習

概述:路由就是我們的URL的設計,你會發現node當中的路由是咱們這些程序員能夠本身定義的。

 

//內置的http模塊
var http = require("http");
//須要一個fs內置模塊(file)server)
var fs = require("fs");
http.createServer(function  (req,res) {
        res.setHeader("Content-type","text/html;charset=utf8");
       if(req.url==="/wangjunkai"){
             //系統內置的fs模塊有一個readFile一個方法
            fs.readFile("./public/1.wangjunka.html",function  (err,data) {
              //輸出文件流
               res.end(data);
           })
       }else if(req.url==="/zhangjie"){
          //系統內置的fs模塊有一個readFile一個方法
         fs.readFile("./public/2.zhangjie.html",function  (err,data) {
              //輸出文件流
               res.end(data);
           })
       }else{
          res.end("對不起,你的URL有錯誤");
       }
}).listen(3000);

 

提示:req這個請求的對象,自生有一個url屬性,能夠獲取到客戶端傳遞過來的URL的數據;

          ②就能夠和URL配合寫路由清單;

//內置的http模塊
var http = require("http");

//須要一個fs內置模塊(file)server)
var fs = require("fs");

http.createServer(function  (req,res) {

       //這個路由訪問的是王俊凱的頁面
       if(req.url==="/wangjunkai"){
           res.setHeader("Content-type","text/html;charset=utf8");
             //系統內置的fs模塊有一個readFile一個方法
            fs.readFile("./public/1.wangjunka.html",function  (err,data) {
              //輸出文件流
               res.end(data);
           })
            //這個路由訪問的是張傑的頁面
       }else if(req.url==="/zhangjie"){
         res.setHeader("Content-type","text/html;charset=utf8");
          //系統內置的fs模塊有一個readFile一個方法
         fs.readFile("./public/2.zhangjie.html",function  (err,data) {
              //輸出文件流
               res.end(data);
           })
         //這個是王俊凱的頁面的樣式表的路由
       }else if (req.url==="/public/wangjunkai.css") {
             res.setHeader("Content-type","text/css");
           fs.readFile("./public/wangjunkai.css",function  (err,data) {
              //輸出文件流
               res.end(data);
           })
           //這個是張傑圖片的路由
       }else if (req.url==="/shuaige/1.jpg") {
           res.setHeader("Content-type","text/img");
           fs.readFile("./public/1.jpg",function  (err,data) {
              //輸出文件流
               res.end(data);
           })
       }else{
                 
              res.end("URL地址錯誤");
       }
}).listen(3000);

知乎的路由設置

 

var http = require("http");

var server = http.createServer(function  (req,res) {
     //獲取地址欄地址
     var url = req.url;
     var array =url.match(/^\/user\/(.+)\/(.+)$/);

     //若是數組爲空;表明的是沒有匹配到不執行下面語句
     if(!array){

        return;
     }
     //這兩個變量是捕獲到的數據
     var $1 = array[1];
     var $2 = array[2];

     var json1 = {
         "zhangjie":"張傑",
         "kebi":"科比",
         "dilireba":"迪麗熱巴",
         "zhaoliying":'趙麗穎'
     }

     var json2 = {
         'asks':"回答",
         "pins":"想法"
     }

   //設置一下響應頭
   res.setHeader("Content-type","text/html;charset=utf8");
   //輸出
   res.end("我是"+json1[$1]+"個人"+json2[$2]);

});

server.listen(3000);

5、模塊

1.node 當中你須要哪個js文件,你就require()

//這個是app.js
var a = require("./a.js");
//這個是a.js
console.log("我是0.1.js文件啊");

提示:你會發現,在a.js文件中申明的變量bapp.js當中不可使用;由於node所有的js文件它們的做用域天生是隔離的;由於沒有window對象;

2.exports 對外暴露

//app.js文件
var a = require("./a.js");
console.log(b);

//a.js文件
var b = 100;
//對於暴露基本的數據:好比變量、函數就能夠用exports方法  a.js
exports.b = 100;
exports.sum = function  ($1,$2) {
      return $1+$2;
}

 

提示:app.js文件要使用a.js文件var a = require("./a.js");變量名稱和文件名稱要統一;

 

       ②對於一個js文件暴露數據exports進行。通常暴露的是基本數據類型(數字、字符串)變量、函數

3.module.exports對外暴露類

 

//app.js
var People = require("./People.js");
var xiaoming = new People("小明",18,"男");
xiaoming.say();

//People.js

function People  (name,age,sex) {
     this.name = name;
     this.age = age;
     this.sex = sex;
}
//原型對象的方法
People.prototype.say = function  (argument) {
     console.log("我是"+this.name);
}
module.exports = People;

 

提示:①若是某一個JS文件對外暴露的是一個類,它須要用的是module.exports = People這種方式暴露類;

好處 不用向這種方式去執行(new People.People("小明",18,"");,而是和咱們前面學些的執行構造函數的方式是同樣的;

       ②引用文件的變量的名必須和引用的js文件名一直;

四、引用文件夾

//app.js
var jihe  = require("./jihe");
console.log(jihe.yuan.mianji(1));
console.log(jihe.juxing.zhouchang(2,3));
提示:若是你引進的是某一個文件夾,系統會自動的進入文件夾當中的index.js文件當中;
//index.js
var juxing = require("./juxing.js");
var yuan = require("./yuan.js");
//暴露矩形對象和圓對象
exports.yuan  = yuan;
exports.juxing = juxing;
//juxing.js
exports.zhouchang = function  (a,b) {
    return 2*(a+b);
}

exports.mianji = function  (a,b) {
     return a*b;
}
//yuan.js
exports.zhouchang = function  (r) {
      return 2*3.14*r;
}

exports.mianji = function  (r) {
     return 3.14 * r *r;
}

五、神奇的node_modules文件夾

var jihe  = require("jihe");
console.log(jihe.yuan.mianji(1));
console.log(jihe.juxing.zhouchang(2,3));

提示:若是你將某一個文件夾放在了node_modules文件當中,那麼你使用這個文件夾當中功能,你就能夠省略相對路徑;

什麼是一個模塊?

一個JS文件就是一個模塊,一個文件夾它也是一個模塊;

你能夠認爲是一個輪子,這個輪子你想使用的時候,就能夠require();

6、npm社區(node 代碼輪子社區)

Npm社區地址:https://www.npmjs.com/

第一步:引入它人的模塊   npm install nzh

第二步:照着人家的API直接使用

 

var nzhcn = require("nzh/cn");
var  solarLunar = require("solarLunar");
var xlsx  = require("node-xlsx");
var fs = require("fs");
//這個是NZH使用
console.log(nzhcn.encodeS(123456));
console.log(nzhcn.encodeS("1.23456789e+21"));

//農曆所以的轉換
var solar2lunarData = solarLunar.solar2lunar(2015, 10, 8);
console.log(solar2lunarData.gzYear+solar2lunarData.gzMonth+solar2lunarData.gzDay);

//excel導出
var data = [[1, 2, 3], [true, false, null, 'sheetjs'], ['foo', 'bar', new Date('2014-02-19T14:30Z'), '0.3'], ['baz', null, 'qux']];

var buffer = xlsx.build([{name: "mySheetName", data: data}]);

fs.writeFile("./貝勒爺. xlsx",buffer);

 

提示:①使用模塊的時候,你須要npm install nzh solarlunar node-xlsx

      ②須要誰就require()

      ③node_modules文件夾在你下載模塊的時候,自動就有了

相關文章
相關標籤/搜索