1. 程式人生 > >從零構建部署Node.js+Express+Bootstrap Web應用

從零構建部署Node.js+Express+Bootstrap Web應用

本文將包括以下內容:

  • 建立一個Express應用
  • 使用npm和package.json管理應用依賴
  • 調整Express工程結構到MVC架構
  • Route和Controller概念分離
  • 建立新的Node模組(module)
  • 使用Git線上部署Express應用到Heroku

在進行一切操作之前, 需要先安裝好Node.js, 對於*nix使用者來說, 直接下載解壓, 並新增到環境變數中即可完成安裝.

首先從Express著手, Express是構建在Node之上的web應用框架.

使用package.json定義依賴

每個Node應用的根目錄都有一個檔案叫做package.json

, 用來記錄Node應用的依賴, 例如:

{
  ...
  "depencencies": {
    "express": "~4.9.0"
    ...
  }
}

其中”~”表示使用最近的patch版本, 推薦使用.

使用npm安裝Node依賴

工程範圍的依賴

在和package.json相同的目錄層級執行以下指令即可:

$ npm install

這會將所有的依賴(包括間接依賴)下載到node_modules資料夾內. 如果後期你想向工程中追加依賴, 只需要執行以下指令:

$ npm install <package-name> --save

以上指令完成了兩步操作:

  • 將指定package下載到node_modules資料夾;
  • 將依賴條目追加到package.json檔案內.

全域性範圍的依賴

一些通用的依賴需要安裝成全域性依賴, 例如express generator:

$ npm install -g express-generator

依賴會被安裝到以下路徑: ${NODE_HOME}/lib/node_modules/express-generator

建立並啟動一個Express工程

  1. 新建一個資料夾
  2. 在資料夾內執行express
  3. npm install按照package.json的定義安裝所有依賴
  4. npm start啟動程式, 瀏覽器訪問localhost:3000即可.

Express的使用者請求處理邏輯

如下圖所示

express-handle-request

重啟一個Node應用

如果你修改了服務端的Node程式碼, 那麼需要停止應用執行, 編譯並重新啟動

重啟應用的方法有兩種, 一種是從啟動應用的控制檯ctrl+c, 然後npm start, 另一種方法是使用nodemon, nodemom是Node應用的監控程式, 能夠簡化Node應用的開發. 安裝方法如下:

$ npm install -g nodemon

然後使用nodemon指令代替npm start啟動應用程式.

如果你只是修改了Jade模板, CSS檔案, 或者客戶端的js程式碼, 無需重新啟動應用

調整Express工程結構到MVC模式

首先在根目錄下新建立一個app_server資料夾, 將根目錄下的routesviews資料夾移到裡面:

express-project-structure

然後更改app.js檔案, 將兩者重新定位到新的位置. 具體的來說就是將原來的

app.set('views', path.join(__dirname, 'views'));
var index = require('./routes/index');
var users = require('./routes/users');

變更為

app.set('views', path.join(__dirname, 'app_server', 'views'));
var index = require('./app_server/routes/index');
var users = require('./app_server/routes/users');

Node模組(module)的生成與使用

舉個例子, 現在我們有a.jsb.js兩個檔案, 假設現在它們在同級目錄下, 我們想在b.js檔案中呼叫a.js中定義的變數或函式. 下面是a.js檔案的內容

module.exports.logThis = function(message) {
  console.log(message);
}

上述程式碼將logThis變數(函式)暴露出來, 供其他模組使用, 經過這樣設定後我們就可以在b.js中如下呼叫

var myModule = require("./a")
myModule.logThis("It works!")

需要注意的一點是, require()方法並不需要加字尾, 它會自動依以下順序搜尋:
- 尋找同名js檔案
- 尋找同名資料夾下的index.js檔案

Bootstrap安裝

  1. 首先下載Bootstrap發行版, 解壓並新增到Express工程下的public目錄(public目錄是用於存放靜態資源的目錄)下的bootstrap目錄(需新建).
  2. 由於Bootstrap依賴jquery, 所以我們還要下載jquery, 從這裡下載, 注意下載完整版的, 不要下載slim版的, 點選之後, 會跳出一個程式碼頁面, 直接拷貝全部, 然後儲存在public/javascript/jquery-<具體的版本.min.js檔案中即可.
  3. 清空Express預設的樣式. 具體的來講, 就是清空public/stylesheet/style.css檔案中的內容

安裝Bootstrap主題

這裡以Amelia主題為例, 從這裡下載, 將解壓得到的amelia.bootstrap.cssamelia.bootstrap.min.css拷貝到Express工程下的public/bootstrap/css資料夾下.

Jade模板的使用

Jade模板的使用原則是:

設計一系列的模板佈局, 然後讓其他檔案去擴充套件

這裡我們來看一個例子, 下面分別是layout.jadeindex.jade檔案的內容:

extend layout
block content
  h1= title
  p Welcome to #{title}

上面程式碼的意思是index.jade擴充套件了layout.jade, block contentlayout.jade中宣告的一個html填充塊, 這裡向裡面填充了一個<h1>和一個<p>.

下面讓我們來看一下layout.jade.

doctype html
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    block content
    script(src='/javascript/jquery-3.1.1.min.js')
    script(src='/bootstrap/js/bootstrap.min.js')

layout.jade除了用於定義html的模板, 還用來進行css和js指令碼的連線, 注意: js指令碼放在頁面最下面有利於提升網頁的載入速度. 此外, 第一行設定的viewport有利於頁面能夠在移動裝置上良好的縮放.

到此, 使用Bootstrap的Amelia主題之後的顯示效果如下:

bootstrap-theme-amelia

使用Heroku進行網站的對外線上演示

將網站託管到線上平臺上的意義是:

可以便利的進行跨瀏覽器的測試, 跨裝置測試, 並且能夠向同事和合作夥伴快速展示與交流開發階段性進展.

類似的平臺服務還有Google Cloud Platform, Nodejitsu, OpenShift等.

安裝Heroku

  1. 從這裡註冊一個免費賬號
  2. 下載Heroku toolbelt, 或者直接使用以下指令在Ubuntu中下載
    bash
    $ wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh
  3. 觸發安裝
    bash
    $ heroku --version
  4. 驗證安裝成果
    bash
    $ heroku --version
    heroku-toolbelt/3.43.15 (x86_64-linux) ruby/1.9.3
    heroku-cli/5.5.6-a9ddee4 (linux-amd64) go1.7.4
    You have no installed plugins.
  5. 登陸(實際上完成了類似ssh金鑰對生成並上傳公鑰的工作)
    bash
    $ heroku login

使用Heroku提交Node.js應用

首先需要保證雲端的執行環境與本地開發環境一致

具體的是在package.json中新增一個engines配置塊, 指明node和npm的版本, 如果不清楚的話, 還是確認一下比較好:

$ node --version
$ npm --version

下面是示例的package.json檔案:

{
  "name": "Loc8r"
  ...
  "engines": {
    "node": "~4.6.0",
    "npm": "~2.15.9"
  },
  ...
}

建立一個雲端啟動指令碼

具體來說就是建立一個啟動指令碼, 指明我們應用的型別以及啟動指令, 對於Node.js應用來說, 需要在應用的根目錄下建立一個名為Procfile的檔案, 示例內容如下:

web: npm start

使用heroku local進行本地驗證

heroku local的前身是foreman, 但是現在的heroku toolbelt中已經用前者替換掉了了後者, 詳見如下官方通知

heroku local工具是用來在提交應用前進行本地驗證的, 使用heroku local啟動應用前需要先關閉本地應用, 然後使用以下指令啟動:

$ heroku local web

程式成功啟動後會監聽在5000埠, 我們可以通過localhost:5000來訪問, 顯示效果應與之前本地直接執行相同.

將應用託管到Heroku

首先需要初始化一個git倉庫, 新增.gitignore檔案, 推薦使用這裡自動生成(鍵入Node即可).

然後在雲端建立一個heroku應用容器(隱式完成了本地倉庫的關聯)

$ heroku create
Creating app... done, ⬢ sheltered-everglades-85543
https://sheltered-everglades-85543.herokuapp.com/ | https://git.heroku.com/sheltered-everglades-85543.git

推送到遠端倉庫

$ git push heroku master

在heroku雲端用測試機(dyno)來執行部署的程式

每位使用者都會免費獲得一個可用的web測試機, 使用如下指令來開啟它

$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Free

線上瀏覽部署情況

$ heroku open

自動在雲端的網址上看到部署的應用的情況

node-app-on-heroku

之後修改了應用程式碼後, 只需要push到heroku容器的master分支, 就會自動更新並部署.

相關推薦

構建部署Node.js+Express+Bootstrap Web應用

本文將包括以下內容: 建立一個Express應用 使用npm和package.json管理應用依賴 調整Express工程結構到MVC架構 Route和Controller概念分離 建立新的Node模組(module) 使用Git線上部署Express應用到

開始構建部署上線Node.js+Express+Bootstrap+Jade響應式網站應用—RSPT丨留學生活第一站(三)

一、Nodejs 線上伺服器部署與釋出綜述 伺服器配置生產環境所需要的步驟大致為: 整個專案部署詳細流程文字解析: 部署流程圖依照學習課程的流程: 看著這個圖,Scott老師有一段精彩的故事詮釋它: 故事還得從左下腳的角落開始,一把椅子

開始——搭建node.js服務

const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res

開始的node.js-1 基礎格式、執行、打斷、路由、讀取檔案。

//打算學下後端,可是不知道選php還是node,想了想反正不打算精通只是不想和後端交流過於麻煩而已,所以還是學node。js吧,不知道能不能學會 //1 安裝node.js  不說啥了  2. 在js裡寫出如下程式碼  開啟命令列 輸入node xxx.js&

Re:Programmer 開始的Node.js(3)

繼續開啟命令提示符,開啟在上篇文章中新建的資料夾 nodejs_new,然後 npm start開啟網頁,輸入 localhost:3000接下來用webstort開啟專案目錄:開啟webstorm,File=>Open找到G:\Express\nodejs_new 

Re:Programmer 開始的Node.js(6)

在成功實現前後臺互動和資料庫連線後,接下來就做一個前臺頁面獲取資料庫資料並區域性重新整理的功能。這個功能需要用到ajax,所以直接在前臺匯入jquery檔案,方便處理頁面。首先,將views資料夾下的layout.jade檔案新增jquery連結,程式碼:doctype ht

Express - 基於 Node.js 平臺的 web 應用開發框架

create down block log 功能 views div save filepath Web 應用 Express 是一個基於 Node.js 平臺的極簡、靈活的 web 應用開發框架,它提供一系列強大的特性,幫助你創建各種 Web 和移動設備應用。 API 豐

為何Node.js 能成為 Web 應用開發最佳選擇?【強推理由】

一項顛覆性的技術進入技術市場總會帶來一陣震驚,但隨之而來往往是被放棄。然而,Node.js 當然不是這樣的情況,它是一個開源的、跨平臺的基於 Chrome 的 JavaScript 執行時。Node.js 由 Ryan Dahl 於 2009 年開發,該平臺現

node.js express+ejs引擎構建第一個項目(一)

sta com 如果 node.js install 安裝 exp expr inf express+ejs初始化項目命令: express -t ejs projetName 目錄結構如下: 安裝依賴: npm install 安裝依賴後,啟動項目:

Nodejs學習筆記(七)—Node.js + Express 構建網站簡單示例

ren 結構 crypto 中間件 實現 cmd ews path releases 前言   上一篇學習了一些構建網站會用到的一些知識點:https://www.cnblogs.com/flyingeagle/p/9192936.html   這一篇主要結合前面講到的知識

angular2+node.js express打包部署

angular是客戶端JS,NODE.JS 是服務端JS,建立SPA 網站需要把這兩者統一到一起。 1、angular2專案建立,使用angular-cli      ng new mypos 2、使用express命令列工具建立express專案。       expr

Node.js+Express構建Http服務(GET方式和POST方式)

Node.js 前提 環境:windows7下載地址:http://nodejs.org/download/ 安裝 官網下載一個安裝檔案點選下一步安裝完成即可. 驗證安裝是否成功:node -v   基本HTTP伺服器 c:/http.js Js程式碼 

Nodejs學習筆記(六)--- Node.js + Express 構建網站預備知識

目錄 前言   前面經過五篇Node.js的學習,基本可以開始動手構建一個網站應用了,先用這一篇瞭解一些構建網站的知識!   主要是些基礎的東西...   如何去建立路由規則、如何去提交表單並接收表單項的值、如何去給密碼加密、如何去提取頁面公共部分(相當於使用者控制元件和母版頁)等等...

Nodejs學習筆記(七)--- Node.js + Express 構建網站簡單示例

目錄 前言   這一篇主要結合前面講到的知識,去構建一個較為完整的網站應用程式,對前面學到的一些知道做一個串聯加深並靈活運用!   功能主要用MySQL資料庫,包括登入、註冊、主頁三部分;下面就一步步開始吧! 新建專案、建立資料庫以及其它準備工作   1.新建express + ejs

瞭解以太坊區塊鏈智慧合約開發構建部署去中心化投票

區塊鏈愛好者(QQ:53016353)編輯器選擇理論上講任何編輯器都可以編寫Solidity合約程式碼,比如:WebStorm,VSCode,Sublime,等等。我選擇的是Atom,沒有任何理由,因為Atom輕量並且介面漂亮。移步https://atom.io/地址,下載安

構建以太坊(Ethereum)智能合約到項目實戰——第23章 構建部署去中心化投票App,decentralization Voting Dapp

上傳數據 文件 ali 安裝 存儲文件 去中心化 圖片上傳 個人 構建 P90 、1-從零構建和部署去中心化投票App-01P91 、2-從零構建和部署去中心化投票App-02P92 、3-從零構建和部署去中心化投票App-03P93 、1-IPFS環境配置P94 、2-I

Node.js, Express的服務器搭建過程的問題

節點 順序 post 模塊化 回調地獄 模塊 調試 cheerio void Node.js, Express的服務器搭建過程的問題 Express : node.js 的框架,根據2012年BYvoid的說法,是node.js官方唯一推薦的框架 怎麽搭建項目? - 安

通過新浪雲部署Node.js微信小程序商城(不用買域名、不用備案、不用配置https)

個數 bre rem faq 開發 mem nbsp edi home 本文檔為微信小程序商城NideShop項目的安裝部署教程(GitHub),歡迎star 一、購買新浪雲SAE 為什麽選擇SAE?免費二級域名和支持https訪問,不用備案,可用做微信小程序服務器。 S

node.js express設置路徑後 子路徑下的頁面訪問靜態資源路徑出問題

ref gin images ejs title use func tle public 在routes/news_mian.js 設置了訪問news_main.html 的路徑 ‘/‘,通知設置一個訪問news-page.html的子路徑‘/newspage‘子路徑。但是

一種簡單的生產環境部署Node.js程序方法

set process 一次 ann 來安 環境配置 load 修改 evel 最近在部署Node.js程序時,寫了段簡單的腳本,發覺還挺簡單的,忍不住想與大家分享。 配置文件 首先,本地測試環境和生產環境的數據庫連接這些配置信息是不一樣的,需要將其分開為兩個文件存儲