nodejs學習筆記


nodejs是基於chromeV8引擎開發的

.模塊

1.每一個模塊文件夾中,推薦都寫一個package.json文件,這個文件的名字不能改.node將自動讀取裏面的配置.
  有一個main,就是入口文件.

2.node_modules文件夾下邊的文件能夠默認讀取.

3.var foo = require("./test/foo.js");引入一個js文件.

4.var foo = require("bar");引入node_modules文件夾下的bar文件夾,不帶擴展名,說明引入的事一個文件夾.

.npm  (http://www.npmjs.com)

  咱們剛纔學習了,模塊就是一些功能的封裝,因此一些成熟的,常用的功能,都有人封裝成模塊.而且放在社區中,供人免費下載.
  這個偉大的社區,叫作npm.也是一個工具名字,node package management.

1.npm的主要職責是安裝開發包和管理依賴項.
  安裝開發包,使用npm install命令;更新,使用npm update命令.
  管理依賴項,藉助package.json文件.

2.npm install silly-datetime  安裝silly-datetime , 默認安裝到node_modules文件夾下.

3.require()中的路徑,是從當前這個js文件出發,找到別人.
  fs模塊讀取文件的時候,用絕對路徑,_dirname獲得當前目錄.

4.安裝 Node 模塊時,若是指定了 --save 參數,那麼此模塊將被添加到 package.json 文件中 dependencies 依賴列表中。
  而後經過 npm install 命令便可自動安裝依賴列表中所列出的全部模塊。

5.初始化package.json 文件  npm init

.ejs(後臺)模板引擎

1.//引入模塊
  var ejs = require("ejs");

  //模板
  var string  = "好高興,今天我買了iPhone<%= a %>s";
  //數據
  var data = {
   a : 6 ,
  };
  //數據綁定
  var html = ejs.render(string,data);

  注意:underscore.js庫的模板標記和ejs模板引擎的模板標記同樣,在一塊兒使用的時候會引發模板衝突
  解決辦法:修改underscore的模板標記{{  }}

       <script type="text/template" id="moban">
          <div class="list-group">
              <a href="javascript:;" class="list-group-item active">
                  <h4 class="list-group-item-heading"><%= xingming%></h4>
                  <p class="list-group-item-text"><%= liuyan%></p>
              </a>
          </div>
       </script>

       <script type="text/javascript">
           //Ajax讀取留言列表
           $.get("duly", function (result) {
               var json = JSON.parse(result);
               var compiled = _.template($("#moban").html());
               for(var i = 0; i < json.result.length ; i++){
                   var html = compiled({"xingming":json.result[i].xingming ,"liuyan":json.result[i].liuyan});
                   $("#liuyanList").append($(html));
               }
           })

       </script>

2.jade模板引擎(本身瞭解)


.express 4.x 框架(http://www.expressjs.com.cn/4x/api.html)

1.Web 應用

  Express 是一個基於 Node.js 平臺的極簡、靈活的 web 應用開發框架,它提供一系列強大的特性,幫助你建立各類 Web 和移動設備應用。
  性能
  Express 不對 Node.js 已有的特性進行二次抽象,咱們只是在它之上擴展了 Web 應用所需的基本功能。

2.app.use(express.static("./public"));express中靜態文件處理,比原生nodejs簡單不少,只須要這樣一句話.

3.express與模板引擎配合,直觀清晰.

  <ul>
      <% for(var i=0; i<news.length; i++){%>
      <li><%= news[i]%></li>
      <% } %>
  </ul>

  //設置模板引擎,直接去Node_module文件夾中找ejs模塊.
  app.set("view engine","ejs");
  app.get("/",function(req,res){
      //"haha"等價於"./views/haha.ejs",  render(模板,數據)去渲染頁面.
      res.render("haha",{
          news:["我是模板引擎","我很好","哈哈哈"],
      });
  });

4.路由

  //當訪問網址的時候,能作什麼:
  app.get(網址,function(req,res){

  });
  app.post(網址,function(req,res){

  });

  //若是想處理這個網址的任何method的請求,all();這裏的網址不分大小寫
  //全部的GET參數(?號後面的內容就是參數),都已經被忽略,錨點#也被忽略
  app.all(網址,function(req,res){

  });

5.中間件

  路由get,post這些東西,就是中間件,中間件講究順序,匹配上第一個以後,就不會日後匹配了,next函數才能繼續匹配.
  app.use()也是一箇中間件.getpost不一樣的是.他的網址不是精確匹配的,而是可以有小文件夾擴展的.

6.get請求和post請求的參數

  get請求的參數在URL,在原生node,須要使用URL模塊來識別參數字符串.express,不須要使用url模塊了.能夠直接使用req.query對象獲得;
  app.get('/admin', function (req,res) {
      //req.query獲得的是請求的參數
      console.log(req.query);
  });

  post請求在express中不能直接得到,必須使用body-parser模塊.使用後,將能夠用req.body獲得參數.
  可是若是表單中含有文件上傳,那麼還須要使用formidable模塊.
  app.use(bodyParser.urlencoded({ extended: false }));
  app.post('/',function (req, res) {
      console.log(JSON.stringify(req.body));
  });


  Itcsat相比,
  Itcsat2是先後端分離,前端頁面靜態化


 7.express中的cookiesession(須要引入cookie-parser模塊)




.underscore是一個js.在項目中用它是呈現模板的,讓先後端實現分離,靜態化前端模板

  <body>
    <div class="container">

    </div>

    //這個就是模板的內容
    <script type="text/template" id="newsList">
        <div class="jumbotron">
            <h1><%= biaoti%></h1>
            <p>時間:<%= shijian%> 做者:<%= zuozhe%></p>
            <p><%=jianjie%></p>
            <p><a class="btn btn-primary btn-lg" href="/news/<%= id%>" role="button">Learn more</a></p>
        </div>
    </script>

    <script src="js/jquery-1.9.1.min.js"></script>
    <script src="js/underscore-min.js"></script>

    <script type="text/javascript">
        //獲得模板內容
        var mobanstring = $("#newsList").html();

        //模板函數
        var compiled = _.template(mobanstring);

        $.get("/news",function(data,status){
            for(var i = 0 ; i < data.length ; i++){

                //給模板編輯傳遞值
                var compiledString = compiled(data[i]);

                //把生成的HTML內容追加到頁面上
                $(".container").append(compiledString);
            }


        });
    </script>

  </body>

. MongoDB數據庫(cls命令清屏)

 1.運行mongo命令,進到安裝目錄下的bin文件夾,或者是配置環境變量

 2.進到bin以後,開啓數據庫服務,用命令./mongod --dbpath  真實存放數據的數據庫的絕對路徑,也就是說數據庫文檔所在的文件夾.

 3.用命令./mongo鏈接數據庫

 4.use database 使用database(database是數據庫名稱)數據庫,建立數據庫
   若是要想把這個數據庫建立成功,那麼必須插入一條數據
   數據庫中不能直接插入數據,只能往集合(collections)中插入數據.集合不須要建立
   db.student.insert({"name":"小花"});其中student就是一個集合

 5.show dbs  顯示數據庫

 6.db顯示當前使用的數據庫

   show collections
   顯示數據庫中全部的集合(collection

   查詢指定數據庫統計信息
   db.stats()

 7.mongoimport命令
   mongoimport --db test --collection student --drop --file stu.json
   --db test 想往哪一個數據庫中導入數據
   --collection student 想往數據庫中的哪一個集合導入數據
   --drop 導入以前把集合清空
   --file stu.json 要導入的json文件



 MongoDB的基本命令

     use 命令
     MongoDB use DATABASE_NAME 用於建立數據庫。該命令將建立一個新的數據庫,若是它不存在,不然將返回現有的數據庫。


     dropDatabase() 方法
     MongoDB db.dropDatabase() 命令是用來刪除一個當前鏈接服務的數據庫。

     drop() 方法
     MongoDB db.collection.drop() 是用來從數據庫中刪除一個集合。其中collection就是那個集合的名稱.


     insert() 方法
     db.teacher.insert({"name":"xiaozhang","kemu":"shuxue"});
     要插入數據到 MongoDB 集合,須要使用 MongoDB 的  insert() save() 方法。

     update()方法
     sjpwd({"name":"小紅"},{$set:{"id":2}});
     更新文檔

     find() 方法
     db.teacher.find();
     要從MongoDB 查詢集合數據,須要使用MongoDB find() 方法。


     pretty() 方法
     db.teacher.find().pretty();
     結果顯示在一個格式化的方式,可使用 pretty() 方法.


     Limit() 方法
     skip() 方法
     db.teacher.find().pretty().limit(1);
     要限制 MongoDB 中的記錄,須要使用 limit() 方法。 limit() 方法接受一個數字型的參數,這是要顯示的文檔數。
     skip() 方法接受一個數字型的參數,這是要略過的文檔數。

     語法:
     limit() 方法的基本語法以下
     >db.COLLECTION_NAME.find().limit(NUMBER)


     MongoDB 數據轉儲
     建立備份MongoDB中的數據庫,應該使用mongodump命令。

     mongodump命令的基本語法以下:
     >mongodump


     恢復數據
     恢復備份數據使用MongoDB mongorerstore 命令。此命令將恢復全部的數據從備份目錄。

     語法:
     mongorestore命令的基本語法
     >mongorestore



.cookiesession,加密
   
  1.cookie的使用,須要引包cookie-parser

    var express = require("express");
    var cookieParser = require("cookie-parser");

    var app = express();
    //使用cookie-parser 中間件
    app.use(cookieParser());


    app.get('/', function(req, res) {
        //設置cookie
        res.cookie("xihao","tybody",{maxAge:900000,httpOnly:true});
        res.send(req.cookies);
    })

    app.get("/xihao", function (req,res) {
        //獲得get 請求
        var xh = req.query.xh;

        //記錄用戶喜愛
        var xhArr = req.cookies.xh || [];
        xhArr.push(xh);
        //設置cookie
        res.cookie("xh",xhArr,{maxAge:900000,httpOnly:true});
        res.send("喜愛:" + xhArr);

    });



  2.session的使用,須要引包express-session

      var express = require("express");
      var session = require("express-session");

      var app = express();

      //設置seddion中間件
      app.use(
          session({
              secret:'keyboard cat',
              resave:false,
              saveUninitialized:true
          })
      );

      app.get("/",function(req,res){
          if(req.session.login == "1"){
              res.send("歡迎"+req.session.username);
          }else {
              res.send("你尚未登陸");
          }
      });

      app.get("/login", function (req,res) {
         //設置session
          req.session.login = "1";
          req.session.username = "kaola";
          res.send("你已經登陸成功");
      });

      app.listen(3000);



    3.加密(引包crypto)

      var crypto = require("crypto");
      module.exports = function (mingma) {
          var md5 = crypto.createHash("md5");
          var password = md5.update(mingma).digest("base64");
          return password;
      }

      var password = md5(req.query.password);


.圖片處理

   第一步: 首先要安裝GraphicsMagick 這個服務
   第二步: nodejs中引gm

   只須要這兩不就能夠完成經常使用的圖片操做了.javascript

相關文章
相關標籤/搜索