node入門學習(二)

来源:http://www.cnblogs.com/createGod/archive/2017/05/15/6859057.html
-Advertisement-
Play Games

一、模塊系統 1.創建模塊和引用模塊 2.服務端的模塊 二、函數 三、路由 四、全局對象 1.在 node中有一個全局對象為global。所有的全局對象都可以在global找到。當然不包括他自己。而在瀏覽器中的全局對象為window 2.__filename 表示當前正在執行的腳本的文件名。它將輸出 ...


一、模塊系統

1.創建模塊和引用模塊

//如何創建一個模塊

exports.hello = function(){
    console.log('hello worl');
};

//這創建了一個模塊
//如何引用模塊

  //1.require();
var hello = require('./module.js');

hello.hello();

//2.

var {hello} = require('./module.js');

hello();

2.服務端的模塊

//服務端的模塊
var http = require('http');

http.createServer(function(request,response){

});

//http 模塊放在哪裡的呢?  模塊的載入順序又是什麼樣的呢?

/*
 *  1. 當require(); 一個模塊的時候 首先會去 文件模塊緩衝區去找
 *  如果存在,直接exports出來
 *  2.如果沒有找到,在去原生模塊緩衝區去找 => 原生模塊 => 緩存 => exports
 *
 *  3.沒有找到就去文件系統
 *
 */

二、函數

//其實就javascript中的函數。
var lan = function(lang){
    console.log(lang);
}

function say(factory,lang){
    factory(lang);
}

say(lan,'chinese');

var http = require('http');

http.createServer(function(request,response){
    response.writeHead(200,{'Content-Type':'text/plain;charset=utf8'});
    response.write('hello world');
    response.end();
}).listen(3000);

三、路由

var http = require('http');
var url = require('url');

http.createServer(function(request,response){
    var pathname = url.parse(request.url,true).pathname;
    //http://localhost:8080/user
    console.log(pathname);
    //pathname  /user

    /*
     http://localhost:8080/admin
     
     pathname  =>   /admin
    
     */
    response.writeHead(200,{'Content-Type':'text/plain;charset=utf8'});
    response.write('這個路徑是:' + pathname);

    response.end();


}).listen(8080);

四、全局對象

1.在 node中有一個全局對象為global。所有的全局對象都可以在global找到。當然不包括他自己。而在瀏覽器中的全局對象為window

2.__filename  表示當前正在執行的腳本的文件名。它將輸出這個文件的絕對路徑

3.__dirname 表示當前正在執行腳本的目錄

4.setTimeout  => clearTimeout   ||    setInterval  =>  clearInterval

5.console =>  api較多

6.process 方法較多。 主要描述node 的進程情況

 

五、GET、POST請求。

1.GET請求(其實就是參數帶在url上吧)

var http = require('http');
var url = require('url');
var fs = require('fs');

var data = '';

var readStream = fs.createReadStream('get.html');

readStream.on('data',function(chunk){
    data += chunk;
});

readStream.on('end',function(){
    console.log('獲取html完畢');
});

http.createServer(function(request,response){
    var params = url.parse(request.url,true).query;
    var userName = params.userName;
    var userPhone = params.userPhone;
    //http://localhost:8888/get.js?userName=node&userPhone=10086
    
    console.log(userName,userPhone);// node  10086
    response.writeHead(200,{'Content-Type':'text/html;charset=utf8'});
    if(!!userPhone && !!userName){
        response.write('<h1>保存成功</h1>')
    }else{
        response.write(data);
    };
    response.end();
}).listen(8888);

console.log('node server start 127.0.0.1:8888')
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="./get.js" method="GET">
    <input type="text" name="userName">
    <input type="text" name="userPhone">
    <input type="submit" value="提交">
</form>
</body>
</html>

2.POST請求 (參數沒有暴露在url上獲取參數的方式和GET有很大的區別);

var http = require('http');
var querystring = require('querystring');
var fs = require('fs');

var data = '';

var readStream = fs.createReadStream('post.html');

readStream.on('data',function(chunk){
    data += chunk;
});

readStream.on('end',function(){
    console.log('獲取html完畢');
});

http.createServer(function(request,response){
    var postData = '';

    request.on('data',function(chunk){
        postData += chunk;
    });
    request.on('end',function(){
        var params = querystring.parse(postData);
        console.log(postData);
        var userName = params.userName;
        var userPhone = params.userPhone;
        //http://localhost:8888/post.js

        console.log(userName,userPhone);// node  119
        response.writeHead(200,{'Content-Type':'text/html;charset=utf8'});
        if(!!userPhone && !!userName){
            response.write('<h1>保存成功</h1>')
        }else{
            response.write(data);
        };
        response.end();
    });

}).listen(8888);

console.log('node server start 127.0.0.1:8888')

post.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="./post.js" method="POST">
    <input type="text" name="userName">
    <input type="text" name="userPhone">
    <input type="submit" value="提交">
</form>
</body>
</html>

六、結束語

Node.js的入門教程就完畢了。寫得比較簡潔,也沒有貼圖。我覺得作為一個程式員。學習能力固然重要,但更重要的是動手能力。每個方法都去敲一遍了,自然就明白這個方法

有什麼用了。沒有什麼東西去敲一遍解決不了的,如果非要說有那就多敲2遍。

Node.js的基礎知識很多,這2篇博文的挑了些,比較重要的說了下。其中主要是文件系統,文件流,路由,GET\POST。模塊知識在工作中會經常遇到。當然在實際項目會用不到這些,因為都會藉助express框架。來進行項目開發。但當我們瞭解其原理。操作起來就根據得心應手了。

 

沒有什麼坎坷是過不去的,加油!Comm on!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 界面設計簡潔,沉浸式的閱讀體驗,可以按分類/文章/用戶瀏覽,在文章頁顯示用戶評論,圖片使用懶載入模式,總之,實現了你看帖所需要的一切。項目基於Vue全家桶,適配移動端,有完善的文檔註釋。 ...
  • jQuery版本:2.0.3 DOM載入有關的擴展 isReady:DOM是否載入完(內部使用) readyWait:等待多少文件的計數器(內部使用) holdReady():推遲DOM觸發 ready():準備DOM觸發。 jQuery.ready.promise=function(){}; 監聽 ...
  • 輪播+滑動+返回頂部效果,插件 ...
  • 在js中的類型檢測目前我所知道的是三種方式,分別有它們的應用場景: 1、typeof:主要用於檢測基本類型. 2、instanceof:主要用於檢測引用類型(左邊是對象,右邊是函數.根據對象的原形鏈往上找,如果原形鏈上有右邊函數.prototype,返回true;否則返回false). var ob ...
  • 原文參考http://mp.weixin.qq.com/s/Nho2DHj-Y59j2F62vpN9jQ1.開發移動端,頭部必要的配置<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" ...
  • // 去掉a,input,button點擊時藍色外邊框和灰色半透明a,button,input,optgroup,select,textare{ -webkit-tap-highlight-color:rgba(0,0,0,0);}// 禁止長按顯示菜單欄a,img{ -webkit-touch-c ...
  • PhantomJS是一款webkit內核的headelsss的瀏覽器,使用QtWebkit, 支持DOM操作、CSS選擇器、JSON、Canvas和SVG,可以模擬瀏覽器的服務。 安裝 mac同學使用 brew install casperjs 可以做什麼? 1. Headless的網站集成測試 可 ...
  • 閉包是一個比較抽象的概念,尤其是對js新手來說.書上的解釋實在是比較晦澀,對我來說也是一樣. 但是他也是js能力提升中無法繞過的一環,幾乎每次面試必問的問題,因為在回答的時候.你的答案的深度,對術語的理解以及js內部解釋器的運作方式的描述,都是可以看出你js實際水平的.即使你沒答對,也能讓考官對你的 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...