欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

初識(shí)Node.js

 更新時(shí)間:2015年03月20日 09:26:08   投稿:hebedich  
本文給大家介紹的是node.js的初體驗(yàn),從最簡(jiǎn)單的內(nèi)容開(kāi)始,慢慢的深入分析node.js。并附上一則很不錯(cuò)的文章《7天學(xué)會(huì)nodeJS》更加詳細(xì)的向我們展示了node.js的學(xué)習(xí)步驟。

先來(lái)簡(jiǎn)單介紹nodeJS

  我們知道JavaScript是運(yùn)行在瀏覽器中的,瀏覽器為它提供了一個(gè)上下文(context),從而讓JavaScript得以解析執(zhí)行。

nodeJS其實(shí)可以這么理解,它是另外一種上下文,它允許在后端(脫離瀏覽器環(huán)境)解析執(zhí)行JavaScript代碼。

因?yàn)樗褂昧薌oogle的V8虛擬機(jī)(Google的Chrome瀏覽器使用的上下文環(huán)境),所以代碼可以同理德被執(zhí)行。

nodeJS除了可以在瀏覽器端顯示結(jié)果之外,還可以直接在控制臺(tái)輸出。

nodeJS的特點(diǎn)

  nodeJS主要有非阻塞、基于事件驅(qū)動(dòng)、單進(jìn)程這幾個(gè)特點(diǎn)。NodeJS的作者說(shuō),他創(chuàng)造NodeJS的目的是為了實(shí)現(xiàn)高性能Web服務(wù)器,他首先看重的是事件機(jī)制和異步IO模型的優(yōu)越性,而不是JS它更適用于輕量、可伸縮,適于實(shí)時(shí)數(shù)據(jù)交互應(yīng)用。nodeJS內(nèi)置了很多對(duì)象,比如http,fs等,我們可以用它搭建我們的HTTP服務(wù)器,在服務(wù)器上進(jìn)行開(kāi)發(fā)。

安裝

  對(duì)于我自己來(lái)說(shuō),很少進(jìn)linux去干活,所以目前只有Windows端的安裝方式。Linux的安裝方式自己網(wǎng)上搜一搜吧..我貼一下別人的

先安裝依賴包
 sudo apt-get install g++ curl libssl-dev apache2-utils 
  sudo apt-get install git-core
then
git clone git://github.com/joyent/node.git  
  cd node
  ./configure
  make  
  sudo make install

聽(tīng)說(shuō)要注意Python版本的問(wèn)題,建議2.6+的版本,低版本會(huì)出現(xiàn)Node安裝錯(cuò)誤,

查詢Python版本可在終端中輸入:pyhton -v

Windows下

安裝很簡(jiǎn)單,上官網(wǎng),把最新版本的msi文件下載下來(lái),直接安裝~可以修改路徑。

一路下去無(wú)阻礙

  安裝成功之后最新版本的默認(rèn)已經(jīng)幫你放進(jìn)系統(tǒng)路徑里邊去了,不必管了。

之后可以到開(kāi)始菜單里邊找到nodeJS打開(kāi)其命令行進(jìn)入,默認(rèn)是進(jìn)入C盤的,一般還是切換到安裝路徑所在盤,比如我的是E盤

看nodeJS是否安裝成功,查看其版本號(hào) node -v

  然后簡(jiǎn)單地測(cè)試一下,先輸入node命令,然后直接控制臺(tái)輸入console.log("hello");

因?yàn)閏onsole.log方法實(shí)際上是有返回值的,這里沒(méi)有給他返回,所以第二個(gè)就是undefined

  再來(lái)測(cè)試一下,這次我們要看見(jiàn) Hello World !

在安裝路徑下(比如我是E:\Program Files\nodejs)新建一個(gè)main.js 文件,輸入

var http = require('http');
  http.createServer(function (req, res) {
   res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }).listen(3000, "127.0.0.1");
  console.log('Server running at http://127.0.0.1:3000/');

  然后在里邊輸入 node main.js 執(zhí)行(一般node里邊退出就是按一次或兩次 Ctrl+C ) ,這時(shí)服務(wù)器就已經(jīng)搭建好了~
瀏覽器中輸入其中的地址:http://localhost:3000

我們的Hello World 出來(lái)了~

然后先來(lái)解釋一下這小段代碼。

  var http = require('http');上面說(shuō)到了,http是nodeJS里邊內(nèi)置的對(duì)象模塊,我們使用require這種方式把它引進(jìn)來(lái)(對(duì)象模塊一般就是這么引入的,我們也可以自己建立自己的模塊,然后將它們引入,之后再提到)。

然后http現(xiàn)在這個(gè)對(duì)象模塊有一個(gè)方法是,http.createServer(),這個(gè)方法創(chuàng)建一個(gè)服務(wù)之后再監(jiān)聽(tīng)一個(gè)地址:http.createServer().listen(port,ip)

從而搭建了一個(gè)服務(wù)器。

  createServer()里邊有一個(gè)匿名函數(shù),主要就是用來(lái)處理相關(guān)信息了。req是請(qǐng)求request,res是回復(fù)response。req一般用于請(qǐng)求階段的解析處理等,比如常見(jiàn)的get中的地址欄url字符的處理。res一般用于收到請(qǐng)求后相應(yīng)的操作,比如寫響應(yīng)頭響應(yīng)體渲染頁(yè)面等等。

在這里,res.writeHead(200, {'Content-Type': 'text/plain'});就相當(dāng)于寫了個(gè)響應(yīng)頭,res.end('Hello World\n');相當(dāng)于寫了個(gè)響應(yīng)體。

  nodeJS提供了很多內(nèi)置對(duì)象方法,比如http,fs,EventEmitter,url等等

這些東西的使用建議參考官方文檔

或者taobao建立的平臺(tái)CNodejs,去里邊逛逛吧

還有這個(gè)7天學(xué)會(huì)nodeJS

  基本的HTTP服務(wù)器搭建就是這樣了,下面介紹node強(qiáng)大的工具npm(node packages manager,包管理工具)。

它主要用于管理我們的包,下載安裝包或者卸載包等等。

舊版本的node需要自個(gè)去下載安裝,不過(guò)新版本的已經(jīng)集成了。所以直接在這里輸入npm -v 查看它的版本吧~

npm安裝方式一般說(shuō)來(lái)有兩種,全局或者本地

好那我們就先來(lái)體驗(yàn)下,裝個(gè)express框架吧。

(express.js是nodejs的一個(gè)MVC開(kāi)發(fā)框架,并且支持jade,ejs等多種模板)

我們可以使用兩種方式安裝:

全局安裝:npm install --g express .(我發(fā)現(xiàn)--g或者-g皆可)這種方式會(huì)把包安裝到全局路徑里邊,一般是C盤的npm/node_modules/下邊

哇哦....

不要在意那些錯(cuò)誤..

接下來(lái)用我想express -V(大寫的)查看它的版本吧

有些朋友可能會(huì)遇到錯(cuò)誤,這里貼個(gè)某網(wǎng)友的的~

解決方式如其所說(shuō):新版本將命令工具分家了,所以先另外再安裝它npm install -g express-generator

我說(shuō)過(guò)了,不要在意上面那些細(xì)節(jié)..O_O

好了,現(xiàn)在我們來(lái)試試express ?

還是那個(gè)main.js 我們把它改成這樣:

var express = require("express");
//var app = express.createServer(); // 在新版本已經(jīng)不兼容了,所以直接用下面那個(gè)
var app = express(); // 或者直接 var app= require("express")();
var port = 3000;
var ip = "127.0.0.1";
app.listen(port,ip);// ip 這個(gè)參數(shù)可不寫,默認(rèn)本地

app.get('/',function(req,res){ 
  res.send("Hello World\n");
});

console.log("start express server\n");

如上所示,新版本可能會(huì)報(bào)錯(cuò)沒(méi)那個(gè)方法

express封裝了http,所以可以直接使用它定義的方法了

然后瀏覽器輸入http://localhost:3000/ 又是

然后再來(lái)簡(jiǎn)單介紹上面的代碼。其余都不必說(shuō)了,說(shuō)一下app.get() 其實(shí)這就是一個(gè)路由處理。

好那我們來(lái)試試路由的處理~

var express = require("express");
//var app = express.createServer(); // 在新版本已經(jīng)不兼容了,所以直接用下面那個(gè)
var app = express(); // 或者直接 var app= require("express")();
var port = 3000;
var ip = "127.0.0.1";
app.listen(port,ip);// ip 這個(gè)參數(shù)可不寫,默認(rèn)本地

app.get('/',function(req,res){ 
  res.send("Hello World\n");
});
app.get('/one',function(req,res){  // 或者“/one/
  res.send("one\n");
});
app.get('/user',function(req,res){  //或者 "/user/"
  res.send("user\n");
});
app.get('/user/:id',function(req,res){  //或者 "/user/"
  res.send("user: "+req.params.id);
});
console.log("start express server\n");

如上所示,get的第一個(gè)參數(shù)就是路徑地址,第二個(gè)參數(shù)就是回調(diào)函數(shù)。

你使用不同的地址路徑,就可以進(jìn)行不同的操作了。

比如瀏覽器地址的不同可路由:

上頭那個(gè)user/11中的11就被當(dāng)做user的參數(shù)id值。我們可以通過(guò)req.params這個(gè)全局方法來(lái)獲取相應(yīng)的參數(shù)值 req.params.id

  對(duì)于express,其實(shí)有一種更普遍的方法,那就是直接用它來(lái)創(chuàng)建一個(gè)項(xiàng)目:

比如,我要?jiǎng)?chuàng)建項(xiàng)目express_test 就輸入

express -e express_test

好了,項(xiàng)目創(chuàng)建成功,看一下它的結(jié)構(gòu)吧~

項(xiàng)目創(chuàng)建成功之后,生成四個(gè)文件夾,主文件app.js與配置信息文件packetage.json

bin是項(xiàng)目的啟動(dòng)文件,配置以什么方式啟動(dòng)項(xiàng)目,默認(rèn) npm start

public是項(xiàng)目的靜態(tài)文件,放置js css img等文件

routes是項(xiàng)目的路由信息文件,控制地址路由

views是視圖文件,放置模板文件ejs或jade等(其實(shí)就相當(dāng)于html形式文件啦~)

express這樣的MVC框架模式,是一個(gè)Web項(xiàng)目的基本構(gòu)成。

更細(xì)的部分先不考慮,我們先來(lái)簡(jiǎn)單地啟動(dòng)吧~

看到?jīng)]有,第一步出錯(cuò)了,因?yàn)樗恢朗鞘裁错?xiàng)目,所以要先進(jìn)入你想要啟動(dòng)的項(xiàng)目。cd express_test

然后又出錯(cuò)了是怎么回事?

看到了吧,它找不到所需模塊,所以一般我們創(chuàng)建新項(xiàng)目的時(shí)候也要先給他安裝相應(yīng)的模塊。

我們直接使用npm install 就行了,它會(huì)自動(dòng)檢測(cè)package.json文件下載安裝相應(yīng)的模塊

好吧,那就啟動(dòng)吧~

ok,啟動(dòng)成功,瀏覽器輸入地址查看一下~

默認(rèn)端口是3000,可以到bin里邊的www文件查看,或者自己修改吧~

哇哦~成功了!簡(jiǎn)單的express項(xiàng)目就是這樣子了..

express模塊就先簡(jiǎn)單地介紹到這來(lái)。更多的express后面會(huì)繼續(xù)講一講~

最后隨手談一下上面提到的require相關(guān)的知識(shí)

編寫稍大一點(diǎn)的程序時(shí)一般都會(huì)將代碼模塊化。在NodeJS中,一般將代碼合理拆分到不同的JS文件中,每一個(gè)文件就是一個(gè)模塊,而文件路徑就是模塊名。

在編寫每個(gè)模塊時(shí),都有require、exports、module三個(gè)預(yù)先定義好的變量可供使用。

  require函數(shù)用于在當(dāng)前模塊中加載和使用別的模塊,傳入一個(gè)模塊名,返回一個(gè)模塊導(dǎo)出對(duì)象。

模塊名可使用相對(duì)路徑(以./開(kāi)頭),或者是絕對(duì)路徑(以/或C:之類的盤符開(kāi)頭),模塊名中的.js擴(kuò)展名可以省略。

舉個(gè)例子:

var express = require("express");
var func1 = require("./func1");// 是與當(dāng)前main.js同路徑下的func1.js模塊
var func2 = require("../nodejs/func2");// func2.js則位于與main.js父文件同路徑下的

  exports對(duì)象是當(dāng)前模塊的導(dǎo)出對(duì)象,用于導(dǎo)出模塊公有方法和屬性。

別的模塊通過(guò)require函數(shù)使用當(dāng)前模塊時(shí)得到的就是當(dāng)前模塊的exports對(duì)象。

比如上面提到的func1.js

我們可以這樣寫代碼然后導(dǎo)出來(lái):

exports.func1 = function(){ 
  console.log("This is func1");
};
/*或者這樣
function func1(){ 
  console.log("This is func1");
}
exports.func1 = func1;
*/

  module對(duì)象可以訪問(wèn)到當(dāng)前模塊的一些相關(guān)信息,但最多的用途是替換當(dāng)前模塊的導(dǎo)出對(duì)象。

例如模塊導(dǎo)出對(duì)象默認(rèn)是一個(gè)普通對(duì)象,如果想改成一個(gè)函數(shù)的話,可以使用以下方式。

module.exports = function () { 
   console.log('Hello World!'); 
};


這樣一來(lái),模塊默認(rèn)導(dǎo)出對(duì)象被替換為一個(gè)函數(shù)。我們?cè)趍ain.js里邊就可以直接 var app = require("./func1")(); 操作了

還可以導(dǎo)出一個(gè)對(duì)象的形式:

//在func1.js里邊這樣
module.exports = function(name, age) { 
this.name = name; 
this.age = age; 
this.about = function() { 
console.log(this.name +' is '+ this.age +' years old'); 
}; 
}; 
//然后在main.js里邊這樣
var Func1 = require('./func1.js'); 
var r = new Func1('xiaoming', 12); 
r.about(); // xiaoming is 12 years old

-----------好了 以上就是nodeJS的起步,有沒(méi)有發(fā)現(xiàn),好神奇..--------------

相關(guān)文章

  • 實(shí)例詳解Nodejs 保存 payload 發(fā)送過(guò)來(lái)的文件

    實(shí)例詳解Nodejs 保存 payload 發(fā)送過(guò)來(lái)的文件

    這篇文章主要介紹了實(shí)例詳解Nodejs 保存 payload 發(fā)送過(guò)來(lái)的文件 的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Node.js Domain 模塊實(shí)例詳解

    Node.js Domain 模塊實(shí)例詳解

    這篇文章主要介紹了Node.js Domain 模塊實(shí)例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • NodeJS實(shí)現(xiàn)自定義流的方法

    NodeJS實(shí)現(xiàn)自定義流的方法

    在 NodeJS 中要想實(shí)現(xiàn)自定義流,需要依賴模塊 stream ,直接引入,不需下載,所有種類的流都是繼承這個(gè)模塊內(nèi)部提供的對(duì)應(yīng)不同種類的類來(lái)實(shí)現(xiàn)的。接下來(lái)通過(guò)本文給大家介紹NodeJS實(shí)現(xiàn)自定義流的方法,一起看看吧
    2018-08-08
  • Node.js連接postgreSQL并進(jìn)行數(shù)據(jù)操作

    Node.js連接postgreSQL并進(jìn)行數(shù)據(jù)操作

    自從MySQL被Oracle收購(gòu)以后,PostgreSQL逐漸成為開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)的首選。這篇文章就給大家介紹了關(guān)于Node.js如何連接postgreSQL數(shù)據(jù)庫(kù),并進(jìn)行數(shù)據(jù)操作的方法,有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。
    2016-12-12
  • nodeJS服務(wù)器的創(chuàng)建和重新啟動(dòng)的實(shí)現(xiàn)方法

    nodeJS服務(wù)器的創(chuàng)建和重新啟動(dòng)的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇nodeJS服務(wù)器的創(chuàng)建和重新啟動(dòng)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 詳解50行代碼,Node爬蟲(chóng)練手項(xiàng)目

    詳解50行代碼,Node爬蟲(chóng)練手項(xiàng)目

    這篇文章主要介紹了50行代碼,Node爬蟲(chóng)練手項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 從一個(gè)爬蟲(chóng)開(kāi)始ChatGPT的編程秀

    從一個(gè)爬蟲(chóng)開(kāi)始ChatGPT的編程秀

    這篇文章主要為大家介紹了從一個(gè)爬蟲(chóng)開(kāi)始ChatGPT的編程秀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • nodejs實(shí)現(xiàn)遍歷文件夾并統(tǒng)計(jì)文件大小

    nodejs實(shí)現(xiàn)遍歷文件夾并統(tǒng)計(jì)文件大小

    這篇文章主要介紹了nodejs實(shí)現(xiàn)遍歷文件夾并統(tǒng)計(jì)文件大小,下面使用nodejs的遍歷文件夾文件內(nèi)容,并且讀取所有的文件,并采取排序往大到小的順序進(jìn)行輸出,需要的朋友可以參考下
    2015-05-05
  • 手把手教你更優(yōu)雅的修改node_modules里的代碼

    手把手教你更優(yōu)雅的修改node_modules里的代碼

    這篇文章主要給大家介紹了關(guān)于如何更優(yōu)雅的修改node_modules里的代碼的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 前端Electron新手入門教程詳解

    前端Electron新手入門教程詳解

    這篇文章主要介紹了Electron新手入門教程詳解,首先圍繞Electron框架的關(guān)鍵知識(shí)點(diǎn)進(jìn)行詳細(xì)講解,然后對(duì)DEMO程序進(jìn)行分析,讓前端開(kāi)發(fā)人員對(duì)使用Electron開(kāi)發(fā)桌面應(yīng)用程序有一個(gè)初步的了解。,需要的朋友可以參考下
    2019-06-06

最新評(píng)論