前端如何獨立用nodeJs實現一個簡單的註冊、登陸功能,是否是隻用nodejs+sql就能夠了?實際上是能夠實現,但離實際應用還有距離,那要怎麼作纔是實際可用的。javascript
網上有不少nodeJs的示例,包括和 sql / nginx … 等周邊技術結合demo,但一般都是作爲入門演示或解決某一問題,少有站在項目實際完整應用角度,給出一個總體的解決方案。一些前端朋友和我討論nodejs時,也多表現出對服務端的欠缺,雖然知道nodejs很好,但難以實際應用。css
我在這塊作了些研究,也在公司項目中有應用,在此和你們分享下,如何用nodejs實現一個實際可用的項目,須要操做的步驟及相關的技術應用。如今還沒想好作怎樣的一個demo,就隨想隨作,若有意義的需求咱們也能夠一塊兒實現下,如有欠缺,也歡迎共同討論。html
第一次作,咱們就先實現下最經常使用的註冊和登陸。前端
技術點:java
⋅⋅*因涉及到的技術點較多,在本項目中每一種技術如nginx只對使用到的部分作講解,其它部分後面用到再講,按部就班,基礎較弱者也好逐步接受。node
⋅⋅*本節,咱們將實現unbuntu、nodejs、nginx的安裝及初步使用,搭建一個可訪問的服務linux
本次開發將linux上開發,建議前端開發者嘗試使用linux系統,其能拓展技術面,在提高開發、發佈效率等方面也有好處,初次使用linux會有些障礙,不過如今linux也有類win7的漂亮桌面環境,操做大體類似,在命令不熟時也能夠正常使用,堅持用兩週,是能夠適應的。nginx
選擇系統上建議安裝適合我的開發者的ubuntu。git
建議安裝雙系統,虛擬機太弱,徹底安裝ubuntu,使用又不便,有些軟件如PS是不支持linux的。web
win7下安裝ubuntu 的雙系統,WIN7安裝ubutntu 步驟參見 http://www.upopen.cn/article/info?id=559291b3f0e6e0665b000001
安裝成功後,咱們就開始提升B格之旅,接下來會對用到的linux操做作簡單解釋,具體的ubuntu教程能夠參考 http://www.upopen.cn/article/info?id=55938b7ff0e6e0665b000003
快捷鍵 Ctrl + Alt + T 打開shell終端,
一、打開Nodejs站點 https://nodejs.org/download/,下載linux下對應的.gz文件。也能夠拷貝下載地址後,
在shell裏執行 wget https://nodejs.org/dist/v0.12.5/node-v0.12.5-linux-x64.tar.gz。
解釋:wget :下載後面路徑指定的文件
二、下載後默認在Downloads文件裏,咱們將壓縮文件放Soft/node 目錄裏以便分類管理
shell執行 mkdir Soft // mkdir: 建立Soft文件夾
執行 cd Downloads //cd: 進入到 Downloads 下載文件目錄
執行 cp node-v0.12.5-linux-x64.tar.gz /home/cc/Soft
//cp: 複製 node..gz到Soft目錄下,注意cc是你的主機名,可經過pwd查看
執行cd //進入我的根目錄
執行cd Soft/node
執行 tar -zxvf node-v0.12.5-linux-x64.tar.gz //tar -zxvf 解壓
執行 mv node-v0.12.5-linux-x64.tar.gz node //mv : 修改文件夾名爲node
執行sudo vi /etc/profile //打開環境變量配置文件
在最後寫入
javascriptexport PATH="/home/cc/Soft/node/bin:$PATH" export NODE_PATH="/home/cc/Soft/node/lib/node_modules"
// 環境變量地址參見 node的 pwd
配置成功後重啓
做用:重啓後,可執行node -v查看是否安裝成功。
解釋:本部涉及到ubuntu的基本命令操做,都有簡單的解釋
目錄結構
root:項目根目錄
⋅⋅web:前端服務
⋅⋅static:靜態服務
⋅⋅*server:後端服務
一、執行 mkdir -p root/web
做用:建立目錄,全部項目都在root下,前端服務在web。建立成功後進入web文件夾 執行cd root/web
二、執行touch package.json
做用:建立 package.json文件,維護nodejs項目的依賴文件
解釋:touch :建立文件
四、執行 vi package.json
做用:用系統的VI編輯器打開 package.json文件。用vi做大量的編輯工做是不適合的,咱們仍是用常規的編輯器,在桌面打開文件系統,進入咱們建立的root/web目錄,使用系統默認的gedit編輯器打開package.json
五、經過gedit在package.json寫入
javascript{ ⋅⋅"name": "myCoolNodejs ", ⋅⋅"version": "0.0.1", ⋅⋅"private": true, ⋅⋅"scripts": { ⋅⋅⋅"start": "node app.js" ⋅⋅}, ⋅⋅"dependencies": { //主要是這兩處,設置引入模塊,後面還會用到其它模塊,另行添加 ⋅⋅⋅"express": "*", ⋅⋅⋅"ejs": "*" ⋅⋅} }
六、執行npm install
做用:下載package.json中dependencies 定義的引入模塊
注意:有時限制於網絡等因素npm install會安裝不成功,可使用淘寶的npm鏡像,執行 npm install -g cnpm --registry=https://registry.npm.taobao.org,安裝cnpm,執行cnpm install 。使用同npm。
七、經過桌面打開 web文件夾,建立app.js,並寫入基本配置
javascript/** * 引入依賴模塊 */ var express = require( 'express' ), http = require( 'http' ), path = require( 'path' ); var app = express(), server = http.Server( app ); /** * 設置 */ app.set( 'port', process.env.PORT || 3000 ); //服務啓動端口 app.set( 'views', __dirname + '/views' ); //視圖文件 app.set( 'view engine', 'ejs' ); //頁面引擎 app.use( '/', express.static( path.join( __dirname, 'assets' ))); //靜態文件路徑 app.get( '/', function( req, res ){ res.render( 'index.ejs' ); //請求跳轉到 index.ejs文件 }) server.listen( app.get( 'port' ), function(){ //監聽服務端口 console.log( 'root server listening on port ' + app.get( 'port' )); } ); server.on( 'close', function(){ console.log( 'close' ); } );
八、web目錄下建立views文件夾,裏面再建立index.ejs文件做爲首頁
九、打開index.ejs文件,並寫入
javascript<!DOCTYPE html> <html> <head> <title>個人nodejs項目</title> </head> <body> <h1>個人nodejs項目</h1> <img src="/public/imgs/logo.png" /> <!-- 引用圖片,是爲測試後面配置靜態服務器--> </body> </html>
做用:ejs語法同html,優點在於其能夠引用一些命令,如接收服務服務端定義的數據、include模板等
十、在web目錄下建立文件夾 assets/public/imgs,拷入logo.png 圖片
十一、shell到web目錄,執行 node app.js,在瀏覽器打開 127.0.0.1:3000,便可看到咱們在index.ejs裏設置的內容,如圖
十二、在root在建立 statc文件夾,做爲靜態服務資源,將目錄web/assets/下的文件,複製到static裏,下面nginx將設置靜態文件代理到static服務器
一、shell執行sudo apt-get install nginx
做用:安裝nginx服務器,nginx的使用可參見http://www.upopen.cn/article/info?id=559254e8b269230039000003
二、執行sudo vi /etc/nginx/sites-enabled/default
做用:因配置文件須要編輯的命令較少,咱們嘗試經過vi 編輯 nginx的配置文件。vi命令操做參見http://www.upopen.cn/article/list?kind=ubuntu
在server裏增長
javascriptlocation ~ \.(png|jpg|css|js|woff|ttf|less|gif)$ { root /home/jgc/root/static/; #配置以上面結尾的文件都指向到 /home/cc/root/static。注意/cc/修改成你的計算機名 } location / { proxy_pass http://mynodejs.com; #其它請求轉向到 http://mynodejs.com; 該名稱能夠自定義 }
在server外面新增
javascriptupstream mynodejs.com { //此處名稱與上面proxy_pass名稱一致 server 127.0.0.1:3000; #建立集羣,爲分攤服務器壓力,能夠建立多個服務器,作負載均衡,若是咱們將web複製一份爲web1,啓動端口改成3001,將其啓動後,此處能夠再增長一條配置 server 127.0.0.1: 3001 # 這樣訪問即可隨機指向3000 及 3001服務,分攤訪問壓力、下降服務宕機風險 }
三、在shell 執行 sudo /etc/init.d/nginx start
做用:啓動nginx服務
四、此時訪問127.0.0.1也打開了和 3000同樣的頁面,不一樣在於其靜態資源是從static文件夾獲取的,能夠經過刪除web中的assets文件測試。咱們後續靜態文件都在statc裏編輯,發佈時static和web放在不一樣的服務器上,即實現了資源分離,爲CDN作準備,
五、執行sudo vi /etc/hosts
做用:打開本地host映射文件,新增一條 127.0.0.1 www.mynodejs.com。保存後,瀏覽器訪問 www.mynodejs.com。
本節咱們使用、開發了以下功能
一、ubuntu的安裝和使用
二、nodejs的安裝 及 模塊安裝
三、nodejs文件的簡單配置和啓動,項目目錄的劃分
四、nginx安裝、簡單配置 及 啓動 [ 反向代理及集羣 ]
若是你本來只是一個單純寫html/css/js的前端開發員,相信這節是能夠學到至關多的新知識,下節,咱們將主要在nodejs及 mongo這一塊,並按實際項目使用建立項目架構。
有不明或錯誤,歡迎加羣討論,謝謝。