『壹』 如何選擇Node.js Web開發框架
Node.js非常適用於Web開發,但是現在無論是一個網站,還是Web App都已經成為包括很多不同部分,如前端、資料庫、業務模塊、功能模塊等等的大型項目,使用Node.js從零開始進行Web開發,也許大中型團隊能夠 勝任,但對於個人和小型團隊來說是不現實的。這時候框架就成為Web開發利器,對於個人開發來說幾乎是必不可少。那麼如何選擇Node.js Web開發框架呢?
首先,我們必須要弄清楚的是,我們需要的是——
程序 or 框架?
程序是已經成型的應用,你需要的是為它搭建環境、添加配置,然後就可以運行起來;框架則是應用的骨架,你需要為它添加數據模型、業務邏輯,它才能成為應用,開始提供服務。
事實上,對於Web開發來說,程序和框架的區別正越來越模糊,比如幾乎婦孺皆知的Wordpress,它是一個博客程序,但它豐富的插件以及高度的 自定義能夠支持很大程度上的二次開發,在這點上它比起一些PHP框架也並不遜色。我個人認為,如果重心在於提供服務而不是掌握技術,有WordPress 這樣的程序是沒有必要使用框架的。
可惜的是,由於Nodejs還很年輕,目前還沒有WordPress這樣的程序,因此目前在Node.js開發里,如果想做出自己想要的作品,框架是必然的選擇。如果是某些特定類型的應用,可以嘗試一些開源的程序,比如要用Nodejs做博客,有Hexo、Ghost等。
Node.js Web框架有哪些?
Node.js里的Web框架分為API框架和Web應用框架。前者能夠開發出RESTful的API,後者也能開發出RESTful API,但還包括模板、渲染等為前端所准備的功能。
API框架的使用場景是為跨平台應用提供統一的數據模型,而渲染由前端/客戶端自行解決。目前比較知名的API框架有
restify(文檔、Github、NPM)
ActionHero.js(官網、Github、NPM)
LoopBack(官網、Github、NPM)
Frisby(官網、Github、NPM)
Fortune.js(官網、Github、NPM)
Web應用框架顧名思義,就是為了打造Web應用所開發的框架。這里有兩種風格的Web應用框架。
一個是Sinatra風格,另一個是Rails風格。Sinatra和Rails都是Ruby語言的Web框架,後者的影響力更大也更為知名。這里簡單的解釋一下兩種風格是什麼意思。
Sinatra風格是指高度可配置,注重開發的自由度。代表性的Nodejs Web框架有:
Express(官網、Github、NPM)TJ大神開發,Node.js官方推薦
hapi(官網、Github、NPM)
koa.js(官網、Github、NPM)
flaliron(官網、Github、NPM)
total.js(官網、Github、NPM)
locomotive(官網、Github、NPM)
Rails風格則是指不重復自己和約定優於配置,以及嚴格遵循MVC結構開發。代表性的框架有:
Sails.js(官網、Github、NPM)
geddy(官網、Github、NPM)
CompoundJS(官網、Github、NPM) 原railswayjs
這兩種風格無所謂誰優誰劣,全憑使用者的偏好。
而在這兩種Web框架之外,還有更大型的框架,即全棧框架,其中的代表是MEAN。
MEAN?
MEAN指MongoDB+Express+Angular.js+Node.js,這一組合包括運行環境、資料庫、Web框架和前端引擎。被稱為 全棧框架(Full-stack framework)。這其中除了Node.js之外,每一個都是可替換的,目標是創建從前端到後端,全部使用javascript的Web應用。
由於這一框架的完善性,有人將其稱為LAMP的接班人。LAMP即PHP的典型運行環境,Linux+Apache+MySql+PHP,被大量的用於各種虛擬主機上。
MEAN看似龐大,但事實上要構建完整的現代化Web應用,特別是SPA(單頁面應用),這幾個組件都是難以缺少的,並且,其中每一項幾乎都是目前 情況下的最佳選擇,因此用於學習和重頭開始打造新的Web應用是非常合適的。但由於實際業務的獨特性,很可能要替換其中的組件,比如用Mysql來替換 MongoDB,因此,學習其中的原理和架構,打造自己的類MEAN框架也是一種選擇。
作為個人和小團隊來說,全棧框架MEAN基本上足夠了,但目前大多數全棧框架還包含一項特性,那就是實時,擁有實時功能的框架我們又稱為實時框架。
實時框架好嗎?
實時框架(Real-time framework)指包含了webSocket的雙向通信功能,能夠在伺服器和客戶端做到實時通信的框架。
服務端和客戶端自由通信的需求一直都在,但由於HTTP協議本身的局限性,因此催生了Comet等變通的方法,但即使這樣也離實時相距甚遠。而當 Node.js興起後,另一個HTML5技術webSocket也漸漸成熟,人們突然發現,實時通信一下子變得觸手可及,於是webSocket技術在 Node.js中得到大量的應用,其中最為知名的模塊就是socket.io,而各種全棧框架也紛紛加入實時特性來應對更廣闊的開發需求。
目前有代表性的實時框架有:
Meteor(官網、Github、NPM)
MEAN.io(官網、Github、NPM)
Derby(官網、Github、NPM)
SocketStream(官網、Github、NPM)
不過說實話,目前能看到的實時通信的應用場景其實不多,其中大多集中於聊天室、to-do、實時圖表、在線游戲等領域。其他領域使用實時特性不但沒必要,而且是對伺服器資源的浪費。因此目前是否要採用實時框架,要看具體的項目而定。
以上基本就是Node.js Web框架的現狀了,相信看到這里,對於選擇何種框架讀者已經心裡有數了吧。最後再介紹一個容易搞混的概念,和解釋一下我的選擇。
YEOMAN?
第一次見到這個詞,我還以為它和MEAN有什麼聯系。事實上,它們是截然不同的兩個東西。YEOMAN由YO(腳手架)、grunt(構建工具)、bower(包管理器),它代表的是一種工作流,與框架開發的思維方式完全不同。具體的介紹可見這里。
YEOMAN能夠和框架達到類似的目的,都是為構建一個Web應用做好准備,但是要不要採用YEOMAN,則是見仁見智。我個人的看法是,學習 YEOMAN本身就需要不少時間,並且有一定的學習門檻。至少在目前,使用框架開發還是相對經濟的,而如果以後YEOMAN這種模式推廣開來,再來學習也 不遲,更何況有一定的Node.js項目經驗之後再來學習YEOMAN要輕松很多。
事實上,我還是很認可YEOMAN這種Generator+package Manager的模式的,這是因為Node.js本身崇尚微模塊的 概念,即無論是多麼小的功能,都將它們模塊化,甚至大的模塊也要拆分成小的模塊,然後通過搭積木的方式來構建應用。這樣能夠徹底的解耦,對於不容易調試的 Javascript來說,也有助於定位和修復應用中的問題。Generator就是這種理念催生下的產物,通過選擇不同的配置和選項,將積木搭起來。不 過對於這種模式目前大家也還處於實驗當中,不急於進行實際應用。
『貳』 nodejs內置模塊有哪些
一、Express框架
前面的章節已經介紹過了,可以使用npm來安裝node.js模塊。具體操作請參照以前寫的nodejs概論。
Express是一個nodejs的web開源框架,用於快速的搭建web項目。其主要集成了web的http伺服器的創建、靜態文本管理、伺服器URL地址請求處理、get和post請求處理分發、session處理等功能。
使用方法,在cmd中打開你所想創建web項目的路徑。然後輸入
Express appname
即可創建一個名為appname的web項目。控制台列印結果
在jada文件中是可以使用for循環和if判斷語句的,可以讓你體會類似JSP的<%%>和php的<php></php>在網頁上輸出數據的快感。
三、forever模塊
nodejs作為http伺服器,需要確保服務順利進行,要注意一下兩點:
1.後台服務運行,監控運行日誌,以及http運行日誌;
2.確保項目的正常安全運行,Node.js的啟動命令node,很大程度無法滿足運行需求;
Node.js的forever模塊在第二點就可以起到很大的作用,同時其擁有監控文件更改、自動重啟等功能。
forever模塊的使用方法有兩種:1.在命令行中使用
forever -l forever.log -o out.log -e err.log app.js
-l forever.log -o out.log -e err.log分別指定了forever的運行日誌,腳本流水日誌,腳本運行錯誤日誌,啟動後將在本文件夾下產生out.log、err.log文件。
2.在編碼中require forever模塊使用。
四、Socket.IO模塊
Socket.IO模塊主要功能是將WebSocket協議應用到所有瀏覽配廳器。主要用於實時的長連接多求情項目中。
例如:在線聯網游戲,實時聊天、實時股票查看、二維碼掃描登錄掘粗等。
安裝方法仍然是在cmd在中輸入npm install socket.io
如何使用Socket.IO來創建一個項目。
需要分別實現服務端和客戶端的邏輯:
先創建一個服務端的node.js腳本index_server.js
var app = require('http').createServer(handler)//創建伺服器app
, io = require('socket.io').listen(app)//引用socket.io模塊監聽app
, fs = require('fs')//引用文件處理模塊
app.listen(80);//指定app監聽的埠,第二個參數127.0.0.1可省略
function handler (req, res) {
fs.readFile(__dirname + '/index.html', function (err, data) { if (err) {
res.writeHead(500); return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.emit('判賣鎮news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
其中,socket.emit()為Socket發送消息的函數,第一個參數表示發送消息的key值,第二個參數為發送消息的內容,也就是發送的數據。
Socket。on()為Socket接收消息的函數,第一個參數為接收消息的可以值,第二個參數為回調函數,其中回調函數攜帶的參數為接收消息所發送的數據。
接下來web前端如何使用JavaScrit 來連接Socket伺服器。
新建一個index_client.html
<script type="text/javascript" src="socket.js"></script>
<script type="text/javascript"> var socket = io.connect('http://localhost');//創建本地sock連接
socket.on('news',function (data) {//Socket接收news消息時執行回調函數 console.log(data);
socket.emit('my other event',{my:'data'});
});</script>
<script type="text/javascript" src="socket.js"></script>載入已經安裝好的Socket.io的本地JavaScrit文件。
var socket = io.connect('http://localhost');因為埠為80,所有這里可以不埠號
socket.on('news',function (data){}//客戶端接收news消息成功後,發送my other event消息到服務端,發送的消息內容為json對象{my:'data'}
接下來只需要運行服務端的index_server.js文件來啟動socket服務
效果:在瀏覽器輸入http://127.0.0.1按F12調出瀏覽器的控制台console即可看見列印出了一個object對象。
執行完畢後可能會報錯:catnot find mole socket.io,說明你的socket.IO沒有安裝,或已經安裝並配置為全局,但你的安裝路徑並沒有配置到在path中,所有無法引用。
你可以選擇配置path,或者安裝到項目內。這里建議安裝到你的項目目錄下,而不是簡單粗暴的配置為全局。先卸載npm uninstall socket.io 進入指定目錄後安裝node index_server.js
socket.io詳細請參閱 http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264
五、request模塊
request模塊為開發者提供了一種簡單訪問HTTP請求的方法。request還支持HTTPS的訪問方法。
安裝:
npm install requset
request模塊基本上覆蓋了所有的HTTP請求方式如GET,POST,HEAD,DEL等。但其最基本的兩個方法是request.get()和request.post().
get和post的區別
get:
1.使用get向伺服器發出和接收的請求會附在url之後。類似:http://www..com?id=1221&name=5555這個url中傳遞了兩個參數,一個為id,一個為name。
2.get請求不能超過1024個位元組。
post沒有限制,也不會附在url上。
接下來做一個簡單的實例
get實例:
首先新建一個伺服器app_get.js
var http= require("http");
http.createServer(function(req,res){
res.writeHead(200,{'content-Type':'text/plain'});
res.end('Hello world
'+req.method);
}).listen(1337,"127.0.0.1");
再建一個發送求情的request_get.js文件
var request=require('request');
request.get("http://127.0.0.1:1337",function(error,response,result){
console.log(result);
});
在CMD中運行app_get.js,運行成功後,再打開一個cmd(之前的cmd不要關閉),執行request_get.js文件。
執行後的結果如下
hello world
GET
可以看出,通過request.get方法訪問
http://127.0.0.1:1337 返回的結果就是res.end()的參數
post實例:
和上面一樣,先新建伺服器app_post.js
var http= require("http"),
querystring=require('querystring');
http.createServer(function(req,res){ var postData=""; //開始非同步接收客戶端post的數據
req.addListener("data",function (postDataChunk) {
postData += postDataChunk;
}); //非同步post數據接收完畢後執行匿名回調函數
req.addListener("end",function(){ var postStr=JSON.stringify(querystring.parse(postData));
res.writeHead(200,{'content-Type':'text/plain'});
res.end(postStr+'
'+req.method);
});
}).listen(1400,"127.0.0.1");
然後再新建一個request_post.js
var request=require("request");
request.post('http://127.0.0.1:1400',{form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result);
})
像上面一樣在cmd中執行後顯示的結果如下:
D:
odejssrc
equest>node request_post.js
{"name":"ermu","book":"node.js"}
POST
request post提交了一個json對象{"name":"ermu","book":"node.js"}而伺服器接通過獲取該POST數據,然後返回客戶端,同時將http請求方式也響應到客戶端。
request post參數可以有兩種傳遞方式。
其中,第一種是將url和form表單的數據作為json參數在request post傳遞。舉例如下:
request.post('url':'http://127.0.0.1:1400',form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result);
})
另一種是將url和form作為兩個參數,上面的實例就是使用這種方法。
六、 Formidable模塊
該模塊的目的是為了解決文件上傳。
在原生的node.js模塊中,提供了獲取post數據的方法,但是並沒有直接獲取上傳文件。
『叄』 React Native開源項目如何運行
學習任何技術,最快捷的方法就是學習完基礎語法,然後模仿開源項目進行學習,React Native也不例外。React Native推出了1年多了, 開源項目太多了,我們以其中一個舉例子.給大家演示下如何運行開源項目.(前提是你已經搭建好React Native環境了)
下載開源項目
首先需要找到開源項目 ,比如下面這個.
地址: https://github.com/Bob1993/react-native-gank
進入github, clone到本地或者直接download到本地。
按照之前運行自己項目的經驗,我們會直接在控制台進入項目目錄,然後輸入
react-native run-ios 或者react-native run-android
這時候發現並沒有react-native 指令.
原因是這樣的, 大部分開源項目並不是完整的項目, 缺少了項目的依賴, 就像我們運行java沒有jdk環境一樣。
下面是一個完整的項目:
剩下的就是運行項目了。
下面在匯總了一些開源項目
開源項目匯總
https://github.com/liuhongjun719/react-native-DaidaiHelperNew 借貸助手
https://github.com/liuhongjun719/react-native-BabyHealth- 仿寶寶健康
https://github.com/nihgwu/react-native-sudoku 數獨
https://github.com/attentiveness/reading reading
https://github.com/CoderGLM/ReactNativeLeaning
https://github.com/eesc88/programmer 雲翻譯客戶端
https://github.com/jiangqqlmj/GaGaMall 嘎嘎商城
https://github.com/879479119/Bilibili-React-Native 仿B站客戶端
https://github.com/Shuijwan/marvel漫威電影客戶端
https://github.com/talentjiang/react_native_office公司移動OA辦公客戶端
https://github.com/yohnz/maoyanFilm仿貓眼電影客戶端
https://github.com/soliury/noder-react-nativeCNode論壇客戶端
https://github.com/Kennytian/LagouApp仿拉勾網客戶端
https://github.com/SFantasy/WeiboReactNativeiOS新浪微博客戶端
https://github.com/kailuo99/toutiaoiOS資訊頭條APP
https://github.com/xiekw2010/react-native-gitfeedGithub客戶端
https://github.com/iSimar/HackerNews-React-NativeHacker新聞客戶端
https://github.com/starzhy/TheOneCoder碼農客戶端
https://github.com/tabalt/ReactNativeNews新聞客戶端
https://github.com/vczero/React-Dou豆瓣搜索客戶端
https://github.com/race604/ZhiHuDaily-React-Native知乎日報客戶端
『肆』 前端用nodejs能做什麼
Node.js到底是什麼?
Node.js是一個JavaScript的編譯環境,當前端語言JavaScript在寫完之後可以交給Node.js進行編譯和解釋,它的存在對於JavaScript有了質的飛躍。
下面就是一個簡單的Node.js命令
#node hello.js
目前,Node.js在大部分領域都佔有一席之地,尤其是I/O密集型的。
比如Web開發,微服務,前端構建等。不少大型網站都是使用 Node.js 作為後台開發語言的,用的最多的就是使用Node.js做前端渲染和架構優化,比如 淘寶 雙十一、去哪兒網 的 PC 端核心業務等。另外,有不少知名的前端庫也是使用 Node.js 開發的,如Webpack是一個強大的打包器,React/Vue 是成熟的前端組件化框架。
Node.js通常被用來開發低延遲的網路應用,也就是那些需要在伺服器端環境和前端實時收集和交換數據的應用(API、即時聊天、微服務)。阿里巴巴、騰訊、Qunar、網路、PayPal、道瓊斯、沃爾瑪和 LinkedIn 都採用了 Node.js 框架搭建應用。
另外, Node.js 編寫的包管理器npm已成為開源包管理了領域最好的生態,直接到2017年10月份,有模塊超過47萬,每周下載量超過32億次,每個月有超過700萬開發者使用npm。
Node.js是一個對於前端工作者不可或缺的工具。尤其是對於JavaScript有著巨大的提升,現階段Node.js的應用已經有了非常蓬勃的發展。對於Node.js的學習和熟練運用,必不可少!
『伍』 nodejs好的cms有哪些,各位推薦下
建議您嘗試一下DoraCMS,Nodejs+express+mongodb編寫的一套內容管理系統。DoraCMS開源沒多久,但是已獲得很多前端開發者的關注。目前市面上有很多內容管理系統(如織夢、帝國等),都是以php為基礎編寫的,而DoraCMS則是基於nodejs,只要有基本的前端開發經驗和少量的js,就很容易上手。DoraCMS創建的目的是為了更深入的了解nodejs並付諸實踐,開源的目的也是為了通過案例來不斷改進我們的nodejs水平,共同提高;其次
DoraCMS結構清晰、模塊簡單,上手很容易。目前市面的cms結構復雜,想要自己修改定製學習成本比較高。初識nodejs的開發者可以了解一個
cms實現的基礎過程,熟悉nodejs的也可以用DoraCMS 來進行二次開發,不用再從頭開始。DoraCMS
遵循MIT協議完全開源,您可以自由定製屬於你自己的網站而不必花很多時間去處理最基礎的一些東西,為了讓更多的人去了解和認識nodejs,於是
DoraCMS 誕生了。
DoraCMS是基於Nodejs+express+mongodb編寫的一套內容管理系統,結構簡單,較目前一些開源的cms,doracms易於拓展,特別適合前端開發工程師做二次開發。