使用node.js進行web開發

來源:互聯網
上載者:User

標籤:

1.安裝express

 npm install -g express-generator

4.0+版本中將命令工具分出來了,所以可以不安裝express,但必須要安裝express-generator

 

2.建立工程

初始化一個 express 項目並安裝所需模組,模板引擎預設格式是jade

express   檔案夾名

要建ejs格式,需要加上-e

cd 檔案夾名 && npm install

 

建立伺服器

node bin/www 或 supervisor bin/www

 

 

app.js:開機檔案,或者說入口檔案
package.json:儲存著工程的資訊及模組依賴,當在 dependencies 中添加依賴的模組時,運行 npm install,npm 會檢查目前的目錄下的 package.json,並自動安裝所有指定的模組
node_modules:存放 package.json 中安裝的模組,當你在 package.json 添加依賴的模組並安裝後,存放在這個檔案夾下
public:存放 image、css、js 等檔案
routes:存放路由檔案
views:存放視圖檔案或者模版檔案
bin:存放可執行檔

 

routes/index.js  路由檔案,相當於控制器,用於組織展示的內容:

var express = require(‘express‘);var router = express.Router();/* GET home page. */router.get(‘/‘, function(req, res, next) {  res.render(‘index‘, { title: ‘Express‘ });});module.exports = router;

當訪問首頁時,調用jade模板引擎,來渲染 index.jade 模版檔案(即將 title 變數全部替換為字串 Express),產生靜態頁面並顯示在瀏覽器中。

 

index.ejs  模板檔案,routes/index.js調用的模板。功能是顯示引用的變數,即res.render函數第二個參數傳入的對象的屬性。

<!DOCTYPE html><html>  <head>    <title><%= title %></title>    <link rel=‘stylesheet‘ href=‘/stylesheets/style.css‘ />  </head>  <body>    <h1><%= title %></h1>    <p>Welcome to <%= title %></p>  </body></html>

 

layout.ejs

預設情況下所有的模板都繼承自layout.jade,即block content是獨特的內容,其餘部分共有,可以看作是頁面架構、

 

3.路由控制

 

建立路由規則

在Index.js後添加

router.get(‘/‘, function(req, res, next) {  res.render(‘index‘, { title: ‘Express‘ });});

 

路徑匹配

router.get(‘/user/:username‘,function(req,res) {    res.send(‘user:‘ + req.params.username);})

 

路徑規則/user/:username會被自動編譯成Regex,類似於 \ /user\ /( [^\ /]+)\ /?的形式。路徑參數可以在相應函數通過req.params的屬性訪問。

 

REST風格的路由規則

REST:表徵狀態轉移,是一種基於HTTP協議的網路應用的介面風格,充分利用HTTP的方法實現統一風格介面的服務。

GET:請求擷取指定資源

POST:向指定資源提交資料

PUT:請求伺服器儲存一個資源

DELETE:請求伺服器刪除指定資源

 

這4種方法通常實現的功能

GET:擷取

POST:新增

PUT:更新

DELETE:刪除

 

express支援同一路徑綁定多個路由相應函數。但請求總是被前一條路由規則捕獲,但後面的規則會被忽略。

app.all(‘/user/:username‘, function(req, res) {   res.send(‘all method captured‘);});app.all(‘/user/:username‘, function(req, res) {   res.send(‘user: ‘ + req.params.username);});

 

路由控制權轉移的方法, 即回呼函數的第三個參數next,通過調用next(),會將路由控制權轉移給後面的規則。

router.all(‘/user/:username‘, function (req, res, next) {   console.log(‘all method captured‘);   next();});router.all(‘/user/:username‘, function (req, res) {   res.send(‘user: ‘ + req.params.username);});

訪問http://localhost:3000/user/sura時,終端列印了‘all method captured,而且瀏覽器中顯示了user: sura。這說明請求先被一個條路由規則捕獲,完成console.log使用next()轉移控制權,又被第二條規則捕獲,向瀏覽器返回資訊。

 

可以實現中介軟體,而且能提高代碼的複用程度。

 

模板引擎

是一個頁面模板根據一定的規則產生HTML的工具。模板引擎的功能是將頁模板和要顯示的資料結合的HTML頁面,它既可以運行在用戶端又可以運行在伺服器端,大多數時候它都在伺服器端直接被解析為HTML,解析完成後再傳輸給用戶端。

在MVC架構中,模板引擎包含在伺服器端,控制權得到使用者請求後,從模型擷取資料,調用模板引擎。模板引擎以資料和頁面為輸入,產生HTML頁面,然後返回給控制器,由控制器返回給用戶端。

 

app.js設定模板引擎和頁面模板的位置

app.set(‘views‘, path.join(__dirname, ‘views‘));
app.set(‘view engine‘, ‘ejs‘);

 

routes/index.js的exports.index函數調用模板引擎

res.render(‘index‘, { title: ‘Express‘ });

res.render的功能是調用模板引擎,並將 其產生的頁面直接返回給用戶端。它接收兩個參數,第一個是模板的名稱,即views目錄下的目標檔案名,不包含副檔名;第二個參數是傳遞給模板的資料。

 

index.ejs

    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>

 

<% code %>:javascript代碼

<%= code %>:顯示替換過HTML特殊字元的內容

<%- code %>:顯示原始HTML內容

 

頁面配置

layout.ejs是一個頁面配置模板,它描述了整個頁面的架構結構,預設情況下每個獨立的頁面都繼承自這個架構,替換掉<%- body %>部分。因為一般為了保持整個網站的一致風格,HTML頁面的<head>部分以及頁首頁尾中的大量內容是重複的。

3.X版本後不支援layout

 

方法1:include

把index.html頁面切分成3個部分:header.html, index.html, footer.html

header.html, 為html頁面的頭部地區

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><title><%=: title %></title><!-- Bootstrap --><link href="/stylesheets/bootstrap.min.css" rel="stylesheet" media="screen"><!-- <link href="css/bootstrap-responsive.min.css" rel="stylesheet" media="screen"> --></head><body screen_capture_injected="true">

 

index.html, 為內容顯示地區

<% include header.html %><h1><%= title %></h1><p>Welcome to <%= title %></p><% include footer.html %>

 

footer.html,為頁面底部地區

<script src="/javascripts/jquery-1.9.1.min.js"></script><script src="/javascripts/bootstrap.min.js"></script></body></html>

 

 

方法2:自行添加layout

在package.json裡面的dependencies添加"express-partials": “*”

   "dependencies": {       "express": "3.1.0",       "ejs": "*",       "express-partials": "*"     }

 

運行cmd並切換至項目目錄運行npm install獲得最新版

在app.js引用express-partials

var partials = require(‘express-partials‘);

在app.set(‘view engine’, ‘ejs’);下面添加app.use(partials());

 

使用node.js進行web開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.