摘要:這些特性不僅帶來(lái)了大的性能提升,還減少多線程程序設(shè)計(jì)的復(fù)雜性,進(jìn)而提高了開(kāi)發(fā)效率。由公司建立的云計(jì)算平臺(tái)率先支持了。
前言
本文章主要寫給那些想了解node語(yǔ)言的開(kāi)發(fā),我的目標(biāo)希望大家通過(guò)閱讀本篇文章能夠簡(jiǎn)單使用node進(jìn)行開(kāi)發(fā),以及了解一些事件驅(qū)動(dòng)的異步編程風(fēng)格,主要分node的背景,安裝配置,模塊創(chuàng)建引用等幾個(gè)方面描述
建議大家在閱讀本篇文章途中 可以親自嘗試一下我所帶來(lái)的小例子,這樣才能更好的掌握!
背景Node.js,或者Node,是一個(gè)可以讓JavaScript 運(yùn)行在服務(wù)器端的平臺(tái)。它可以讓JavaScript 脫離瀏覽器的束縛運(yùn)行在一般的服務(wù)器環(huán)境下,就像運(yùn)行Python、Perl、PHP、Ruby程序一樣。你可以用Node.js 輕松地進(jìn)行服務(wù)器端應(yīng)用開(kāi)發(fā),Python、Perl、PHP、Ruby 能做的事情Node.js 幾乎都能做,而可以做得更好。
Node.js 是一個(gè)為實(shí)時(shí)Web (Real-timeWeb) 應(yīng)用開(kāi)發(fā)而誕生的平臺(tái),它從誕生之初就充分考慮在實(shí)時(shí)響應(yīng)、超大規(guī)模數(shù)據(jù)要球下架構(gòu)的可擴(kuò)展性。這使得它摒棄了傳統(tǒng)平臺(tái)依靠多線程來(lái)實(shí)現(xiàn)高并發(fā)的設(shè)計(jì)思路,而采用了線程、異式I/O、事件驅(qū)動(dòng)式的程序設(shè)計(jì)模型。這些特性不僅帶來(lái)了大的性能提升,還減少多線程程序設(shè)計(jì)的復(fù)雜性,進(jìn)而提高了開(kāi)發(fā)效率。Node.js 最初是由Ryan Dahl 發(fā)起的開(kāi)源項(xiàng)目,后來(lái)被Joyent 公司注意到。Joyent 公司將Ryan Dahl 招人旗下,因此現(xiàn)在的Node.js 由Joyent 公司管理并維護(hù)。盡管它誕生的時(shí)間( 2009年) 還不長(zhǎng),但它的周圍配經(jīng)形成了一個(gè)龐大的生態(tài)系統(tǒng)。Nodejs 有著強(qiáng)大而靈活的包管理器(nodepackagemanager,npm),目前已經(jīng)有上萬(wàn)個(gè)第三方模塊,其中有網(wǎng)站開(kāi)發(fā)框架,有MySQL、PostgreSQL、MongoDB 數(shù)據(jù)庫(kù)接口,有模板語(yǔ)言解析、CSS 生成T 具郵件、加密、圖形、調(diào)試支持,甚至還有圖形用戶界面和操作系統(tǒng)API 具。由VMware 公司建立的云計(jì)算平臺(tái)CloudFoundry 率先支持了Node.js。2011年6月,微軟宣布與Joyent 公司合作,將Node.js 移植到Windows,同時(shí)Windows Azure 云計(jì)算平臺(tái)也支持Node.js。Node.js 目前還處在迅速發(fā)展階段,相信在不久的未來(lái)它一定會(huì)成為流行的Web應(yīng)用開(kāi)發(fā)平臺(tái)。
讓我們從現(xiàn)在開(kāi)始,一同探索Node.js 的美妙世界吧!
安裝配置在window上面很容易安裝node 只需要訪問(wèn)node官網(wǎng),點(diǎn)擊DownLoad鏈接,然后選擇window Installer,下載安裝包,下載完成后打開(kāi) 點(diǎn)擊Next 如圖,就可以安裝完成
為了檢測(cè)安裝是否完成,打開(kāi)命令行CMD,然后輸入node 如果下載成功 便進(jìn)入node交互模式 如圖:
通過(guò)這種方式安裝還會(huì)自帶NPM 我們可以直接在使用它!
Mac OS X上安裝Node.js
只需要訪問(wèn)node官網(wǎng),點(diǎn)擊DownLoad鏈接,然后選擇Macintosh Installer,下載安裝包,下載完成后運(yùn)行安裝包,根據(jù)提示完成安裝:
node和npm都會(huì)安裝到/usr/local/bin目錄下,安裝過(guò)程需要管理員權(quán)限,安裝完后在終端輸入node回車進(jìn)入node交互模式,如果提示-bash:node :command not found 那就是沒(méi)有已正確的方式安裝完成。需要重新安裝
安裝完成之后 練習(xí)一下進(jìn)入node交互環(huán)境
consoloe.log("hello,node.js")
輸出 // hello,node.js
1 + 2
輸出 // 3
可以進(jìn)行加減乘除 運(yùn)算
接下來(lái)創(chuàng)建一下第一個(gè)應(yīng)用 也可以叫模塊 !
打開(kāi)你所常用的文本編輯器輸入
var http = require("http"); //通過(guò)require對(duì)象(指令)來(lái)引用http模塊 //參數(shù)request代表是發(fā)送請(qǐng)求對(duì)象 response代表是響應(yīng)請(qǐng)求的對(duì)象 http.createServer(function(req,res){ //通過(guò)http對(duì)象的方法createServer創(chuàng)建一個(gè)服務(wù)器 res.writeHead(200, {"Content-Type": "text/html"}); //規(guī)定數(shù)據(jù)的content-type文本類型為text/html res.write("Node.js
"); //響應(yīng)請(qǐng)求然后write 字體大小為h1標(biāo)準(zhǔn)的node.js字樣 res.end("Hello World
"); //發(fā)送響應(yīng)數(shù)據(jù)為 hello world; }).listen(8888); //該服務(wù)監(jiān)聽(tīng)本地host 端口8888 console.log("Server running at http://127.0.0.1:8888/"); //在終端告訴用戶該服務(wù)運(yùn)行與8888端口
保存為hello.js
然后你打開(kāi)當(dāng)前目錄,打開(kāi)命令行輸入 node hello.js 你就會(huì)在命令行處看到Server running at http://127.0.0.1:8888/ ,然后就可以打開(kāi)瀏覽器輸入這個(gè)http://127.0.0.1:8888/ 就可以看到剛才寫的響應(yīng)數(shù)據(jù)
**是不是特別簡(jiǎn)單!!!!!
模塊的創(chuàng)建與引用學(xué)習(xí)node.JS必須懂的一些地方
什么是模塊?
如何創(chuàng)建并加載模塊?
如何創(chuàng)建一個(gè)包?
如何使用包管理?
這次先講前倆點(diǎn),和稍微滲透3 4 點(diǎn)
第一點(diǎn)!
模塊是Node.js應(yīng)用程序的基本組成部分,文件和模塊是一一對(duì)應(yīng)的。換句話說(shuō),一個(gè)Node.js文件就是一個(gè)模塊,這個(gè)文件可能是JavaScript代碼,JSON或者編譯過(guò)的C/C++擴(kuò)展。
var http= require("http"),其中http是Node.js的一個(gè)核心模塊,其內(nèi)部是用C++實(shí)現(xiàn)的,外部用Javascript封裝。我們通過(guò)require函數(shù)獲取這個(gè)模塊 ,從而才能使用其中的對(duì)象。
第二點(diǎn)!
在Node.js,創(chuàng)建一個(gè)模塊非常簡(jiǎn)單,因?yàn)橐粋€(gè)文件就是一個(gè)模塊,我們要關(guān)注的問(wèn)題僅僅只是如何在其他文件獲取這個(gè)模塊,Node.js提供了exports和require倆個(gè)對(duì)象,其中exports是模塊公開(kāi)的接口,require用于從外部獲取一個(gè)模塊的接口,即獲取模塊的exports對(duì)象。
// 創(chuàng)建模塊 //module.js var name; exports.setName = function(thyName){ name = thyName; } exports.sayHello = function() { console.log("hello" + name) }
同級(jí)目錄下創(chuàng)建getmodule.js
//引入模塊 // getmodule.js var myModule = require("./module"); myModule.setName("zhangsan"); myModule.sayHello(); 在命令行運(yùn)行node getmodule.js 輸出// hello zhangsan
以上該例子中,module.js通過(guò)exports對(duì)象吧setName 和 sayHello作為模塊的訪問(wèn)接口,在getmodule.js中通過(guò)
require("./module")加載這個(gè)模塊,然后就可以之間訪問(wèn)module.js中exports對(duì)象的成員函數(shù)了
require 不會(huì)重復(fù)加載模塊,無(wú)論調(diào)用多少次require,獲得的模塊都是同一個(gè),修改一下上面的getmodule.js
//修改getmodule.js var hello1 = require("./module"); hello1.setName("zhangsan"); var hello2 = require("./module"); hello2.setName("zhangsan2"); hello1.sayHello(); // 輸出結(jié)果為zhangsan2!
因?yàn)樽兞縣ello1和變量hello2執(zhí)行都是同一個(gè)實(shí)例,因此hello1.setName的結(jié)果被hello2.setName覆蓋!結(jié)果由后者決定
把一個(gè)對(duì)象封裝到模塊中 例如:
//hello.js function hello (){ var name; this.setName = function(thyName) { name = thyName; } this.sayHello = function() { console.log("hello" + name); } };
module.exports = Hello; //導(dǎo)出該模塊接口; 如果按導(dǎo)出方法哪有 exports.Hello = Hello 引入require("./hello").Hello;
按上面module.exports = Hello導(dǎo)出 引入模塊; //getHello.js var Hello = require("./hello"); hello = new Hello(); hello.setName("zhangsan"); hello.sayHello(); //輸出hello zhangsan
第三點(diǎn) /創(chuàng)建包
包是在模塊基礎(chǔ)上更深一步的抽象,Node.js的包類型與C/C++的函數(shù)庫(kù)或者Java/.Net的類庫(kù).將某個(gè)獨(dú)立的功能封裝起來(lái),用于發(fā)布
更新,依賴管理和版本控制.Node.js根據(jù)CommonJS規(guī)范實(shí)現(xiàn)了包機(jī)制,開(kāi)發(fā)了npm來(lái)解決包發(fā)布和獲取;
node.js的包就是一個(gè)目錄,包含一個(gè)JSON格式的包說(shuō)明文件package.json. package.json必須在包的頂層目錄下,其他遵循CommonJS的規(guī)范不是特別嚴(yán)格
第四點(diǎn) /包管理
node.js包管理,即npm是Node.js官方提供的包管理工具,它已經(jīng)成為了Node.js包的標(biāo)準(zhǔn)發(fā)布平臺(tái),npm提供了命令行工具,你可以很方便去下載 安裝 升級(jí) 刪除包! 也可以發(fā)布 維護(hù)你自己的包!
npm install(i) pagejson_name //下載的格式 本地模式 末尾加-g (--global) 就是全局模式 npm uninstall pagejson_name //刪除的格式 末尾加-g (--global) 就是全局模式 //等等很多命令 可以去搜索 就不一一列舉了待續(xù)!!
本來(lái)應(yīng)該把node一些核心模塊一塊說(shuō)了的 比如全局對(duì)象 process console 事件驅(qū)動(dòng)events 事件發(fā)射器 error事件 繼承EventEmitter 等等
但是今天確實(shí)身體不適,還請(qǐng)諒解,可能會(huì)休息幾天 所以提前把這版發(fā)出來(lái),暫時(shí)把他定位為第一版 對(duì)于node的探索,我還會(huì)更新 第二版的,下一章節(jié)除了會(huì)補(bǔ)全這次沒(méi)有講到了還會(huì)帶大家利用node來(lái)進(jìn)行web開(kāi)發(fā)!初步定稿為1月2號(hào)!
http 與express 安裝與搭建
路由的控制 如工作原理 創(chuàng)建路由規(guī)則等等
模板引擎 什么是?怎么使用?如何利用布局?等等
結(jié)語(yǔ)希望大家可以通過(guò)看這篇文章能有收獲,最簡(jiǎn)單的證明就是把項(xiàng)目用到node的配置文件再去拿出來(lái)看看,最起碼知道它是怎么個(gè)流程,不一定知道它干什么,但是知道它從哪來(lái) 是導(dǎo)出還說(shuō)引用!這就是進(jìn)步!
//進(jìn)一步學(xué)習(xí)參考這篇書 學(xué)習(xí)
https://www.nodebeginner.org/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/90444.html
摘要:老姚淺談怎么學(xué)鑒于時(shí)不時(shí),有同學(xué)私信問(wèn)我老姚,下同怎么學(xué)前端的問(wèn)題。擼碼聽(tīng)歌,全局控制。 淺析用 js 解析 xml 的方法 由于項(xiàng)目上需要解析 xml,于是各種百度,然后自己總結(jié)了下各個(gè)主流瀏覽器解析 xml 的方法,只能是很淺顯的知道他的用法,但是還沒(méi)有深層次的研究。 裝 X - 建立自己的斗圖網(wǎng)站庫(kù) 之前加過(guò)一個(gè)斗圖群,看到很多經(jīng)典的表情,然后就收藏到了 QQ, 迫于本屌絲開(kāi)不起...
摘要:談起閉包,它可是兩個(gè)核心技術(shù)之一異步基于打造前端持續(xù)集成開(kāi)發(fā)環(huán)境本文將以一個(gè)標(biāo)準(zhǔn)的項(xiàng)目為例,完全拋棄傳統(tǒng)的前端項(xiàng)目開(kāi)發(fā)部署方式,基于容器技術(shù)打造一個(gè)精簡(jiǎn)的前端持續(xù)集成的開(kāi)發(fā)環(huán)境。 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果讀完本文還不懂,可以揍我。 不論你是javascript新手還是老鳥(niǎo),不論是面試求職,還是日...
摘要:在評(píng)估了許多業(yè)務(wù)流程解決方案后,該公司決定采用在上運(yùn)行的。我們必須不停運(yùn)行,我們必須保持可用,我們必須有最少的停機(jī)時(shí)間。該公司將其群集隔離到一個(gè)不受限制的區(qū)域和一個(gè)限制區(qū)域,該區(qū)域有自己的一組節(jié)點(diǎn),用于數(shù)據(jù)保護(hù)。 一家初創(chuàng)公司如何通過(guò)Kubernetes將其基礎(chǔ)設(shè)施成本降低50% showImg(https://segmentfault.com/img/bVbqosb?w=1024&h...
摘要:在評(píng)估了許多業(yè)務(wù)流程解決方案后,該公司決定采用在上運(yùn)行的。我們必須不停運(yùn)行,我們必須保持可用,我們必須有最少的停機(jī)時(shí)間。該公司將其群集隔離到一個(gè)不受限制的區(qū)域和一個(gè)限制區(qū)域,該區(qū)域有自己的一組節(jié)點(diǎn),用于數(shù)據(jù)保護(hù)。 一家初創(chuàng)公司如何通過(guò)Kubernetes將其基礎(chǔ)設(shè)施成本降低50% showImg(https://segmentfault.com/img/bVbqosb?w=1024&h...
摘要:在,是當(dāng)之無(wú)愧的王者,贏得了與之間的戰(zhàn)爭(zhēng),攻陷了的城池。于月發(fā)布了版本,這一版本為了更好的表現(xiàn)加入了渲染方式。前端框架這個(gè)前端框架清單可能是年疲勞的元兇之一。的創(chuàng)建者,目前在工作為尋找構(gòu)建簡(jiǎn)單性和自主配置性之間的平衡做了很大的貢獻(xiàn)。 春節(jié)后的第一篇就從這個(gè)開(kāi)始吧~本文已在前端早讀課公眾號(hào)上首發(fā) 原文鏈接 JavasScript社區(qū)在創(chuàng)新的道路上開(kāi)足了馬力,曾經(jīng)流行過(guò)的也許一個(gè)月之后就過(guò)...
閱讀 2800·2021-11-22 14:44
閱讀 541·2021-11-22 12:00
閱讀 3683·2019-08-30 15:54
閱讀 1570·2019-08-29 17:15
閱讀 1898·2019-08-29 13:50
閱讀 1107·2019-08-29 13:17
閱讀 3513·2019-08-29 13:05
閱讀 1181·2019-08-29 11:31