node.js之Express入門詳解

Exprsss的入門詳解

Express是什麼

Express 是基於 Node.js 平臺,快速、開放、極簡的 web 開發框架。html

Express安裝與使用

安裝

新建Myapp目錄node

使用cmd建立pakeage.json文件web

npm init

安裝express正則表達式

npm install express --save

使用

進入 Myapp 目錄,建立一個名爲 app.js 的文件,而後將下列代碼複製進去:express

var express = require('express');
// 引入express
var app = express();

app.get('/', function (req, res) {\ 
  res.send('Hello World!');
});

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});

運行npm

node app.js

在瀏覽器中打開 http://localhost:3000/ 並查看輸出結果。json

Express生成器

咱們使用Express生成器能夠快速建立一個應用的骨架。這是一個腳手架工具.瀏覽器

安裝

npm install express-generator -g

使用

建立工做目錄,在工做目錄下運行如下命令服務器

express myapp

這會在你的工做目錄下建立一個myapp文件夾,而後咱們進入myapp文件夾,運行如下命令安裝依賴cookie

npm install

完成後運行如下命令啓動

set DEBUG=myapp & npm start

在瀏覽器中打開 http://localhost:3000/ 網址就能夠看到這個應用了。

Express路由

路由是指如何定義應用的端點(URIs)以及如何響應客戶端的請求。

路由是由一個 URI、HTTP 請求(GET、POST等)和若干個句柄組成,它的結構以下: app.METHOD(path, [callback...], callback), app 是 express 對象的一個實例, METHOD 是一個 HTTP 請求方法, path 是服務器上的路徑, callback 是當路由匹配時要執行的函數。

下面是一個基本路由實例

var express = require('express');
var app = express();

app.get('/', function(req, res) {
  res.send('第一個路由');
});

路由方法

路由方法源於 HTTP 請求方法,和 express 實例相關聯。

Express 定義了以下和 HTTP 請求對應的路由方法: get, post, put, head, delete, options, trace, copy, lock, mkcol, move, purge, propfind, proppatch, unlock, report, mkactivity, checkout, merge, m-search, notify, subscribe, unsubscribe, patch, search, 和 connect。

app.all() 是一個特殊的路由方法,沒有任何 HTTP 方法與其對應,它的做用是對於一個路徑上的全部請求加載中間件。

路由路徑

使用字符串的路由路徑示例:

// 匹配根路徑的請求
app.get('/', function (req, res) {
  res.send('root');
});

使用字符串模式的路由路徑示例:

// 匹配 acd 和 abcd
app.get('/ab?cd', function(req, res) {
  res.send('ab?cd');
});

使用正則表達式的路由路徑示例:

// 匹配任何路徑中含有 a 的路徑
app.get(/a/, function(req, res) {
  res.send('/a/');
});

在腳手架中的使用

打開myapp文件夾下的routes文件夾,裏面有腳手架爲咱們建立的index.js路由文件,打開後咱們能夠看到

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
//   加載index模版傳入title
});

module.exports = router;

這就是一個路由

而後咱們打開myapp下的app.js(也有多是index.js)文件
能夠找到這樣的兩行代碼

var index = require('./routes/index');
// 引入index文件
app.use('/', index);
// 使用

Express模版引擎

須要在應用中進行以下設置才能讓 Express 渲染模板文件:

views, 放模板文件的目錄,好比: app.set('views', './views')

view engine, 模板引擎,好比: app.set('view engine', 'jade')

安裝相應的模板引擎 npm 軟件包。

npm install jade --save
// 或者
npm install ejs --save

在 views 目錄下生成名爲 index.jade 的 Jade 模板文件,內容以下:

html
  head
    title!= title
  body
    h1!= message

Express中間件

Express 是一個自身功能極簡,徹底是由路由和中間件構成一個的 web 開發框架:從本質上來講,一個 Express 應用就是在調用各類中間件。

中間件(Middleware) 是一個函數,它能夠訪問請求對象(request object (req)), 響應對象(response object (res)), 和 web 應用中處於請求-響應循環流程中的中間件,通常被命名爲 next 的變量。

中間件的功能包括:

  • 執行任何代碼。
  • 修改請求和響應對象。
  • 終結請求-響應循環。
  • 調用堆棧中的下一個中間件。

若是當前中間件沒有終結請求-響應循環,則必須調用 next() 方法將控制權交給下一個中間件,不然請求就會掛起。

Express 應用可以使用以下幾種中間件:

  • 應用級中間件
  • 路由級中間件
  • 錯誤處理中間件
  • 內置中間件
  • 第三方中間件

應用級中間件

應用級中間件綁定到 app 對象 使用 app.use() 和 app.METHOD(), 其中, METHOD 是須要處理的 HTTP 請求的方法,例如 GET, PUT, POST 等等,所有小寫.

var app = express();

app.use('/', function (req, res, next) {
  console.log('Request Type:', req.method);
  next();
});

在路由中的這個function就是中間件,它有3個參數,分別爲req(請求對象).res(響應對象).next(),若是去掉next(),下一個中間件就不會執行

例如

var app = express();

app.use('/user/:id', function (req, res, next) {
  console.log('Request Type:', req.method);
  
});

app.use('/user/:id', function (req, res, next) {
  console.log('Request Type:', req.method);
  next()
});

若是須要在中間件棧中跳過剩餘中間件,調用 next('route') 方法將控制權交給下一個路由。 注意: next('route') 只對使用 app.VERB() 或 router.VERB() 加載的中間件有效。

app.get('/user/:id', function (req, res, next) {
  // 若是 user id 爲 0, 跳到下一個路由
  if (req.params.id == 0) next('route');
  // 不然將控制權交給棧中下一個中間件
  else next(); //
}, function (req, res, next) {
  // 渲染常規頁面
  res.render('regular');
});

// 處理 /user/:id, 渲染一個特殊頁面
app.get('/user/:id', function (req, res, next) {
  res.render('special');
});

路由級中間件

路由級中間件和應用級中間件同樣,只是它綁定的對象爲 express.Router()。

var router = express.Router();

路由級使用 router.use() 或 router.VERB() 加載。

var app = express();
var router = express.Router();

// 一箇中間件棧,顯示任何指向 /user/:id 的 HTTP 請求的信息
router.use('/user/:id', function(req, res, next) {
  console.log('Request URL:', req.originalUrl);
  next();
}, function (req, res, next) {
  console.log('Request Type:', req.method);
  next();
});

錯誤處理中間件

錯誤處理中間件和其餘中間件定義相似,只是要使用 4 個參數,而不是 3 個,其簽名以下: (err, req, res, next)。

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

內置中間件

express.static(root, [options])

express.static 是 Express 惟一內置的中間件。它基於 serve-static,負責在 Express 應用中提託管靜態資源。

第三方中間件

經過使用第三方中間件從而爲 Express 應用增長更多功能。

安裝所需功能的 node 模塊,並在應用中加載,能夠在應用級加載,也能夠在路由級加載。

實際上,咱們建立的這個應用已經引入了兩個第三方的中間件,在 package.json 中就能夠找到

"dependencies": {
    "body-parser": "~1.18.2",
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "express": "~4.15.5",
    "jade": "~1.11.0",
    "morgan": "~1.9.0",
    "serve-favicon": "~2.4.5"
}

其中 body-parser 和 cookie-parser 就是兩個第三方中間件

進程管理器

進程管理器
在編寫程序時,咱們發現,每次更改文件以後,都須要在命令行內中止當前的服務,而後輸入 npm start ,很麻煩。咱們須要一款自動刷新的工具

這裏介紹一下 pm2

安裝:

npm install pm2 -gd

安裝完畢,運行咱們的程序吧:

還記得咱們以前說的 npm start 的啓動路徑沒

pm2 start ./bin/www --watch
[PM2] Applying action restartProcessId on app [www](ids: 0)
[PM2] [www](0) ✓
[PM2] Process successfully started
┌──────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬──────────┬──────────┬──────────┐
│ App name │ id │ mode │ pid   │ status │ restart │ uptime │ cpu │ mem      │ user     │ watching │
├──────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼──────────┼──────────┼──────────┤
│ www      │ 0  │ fork │ 14448 │ online │ 0       │ 0s     │ 0%  │ 8.6 MB   │ motor │ enabled  │
└──────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴──────────┴──────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

當顯示 status 爲 online 時,說明程序啓動成功

如今能夠打開 http://localhost:3000 就能夠看到運行的程序了

從命令行中咱們能夠看出咱們的 app 名稱, id ,狀態,內存和 cpu 佔用,監視狀態等信息

啓動完成以後咱們就能夠根據咱們程序的id進行控制了

下次啓動能夠輸入

pm2 start 0 --watch

別忘了 --watch ,沒有它,程序是沒法自動刷新的

pm2 stop 0
//中止應用:
pm2 restart 0
//重啓
pm2 show 0
//顯示程序信息
pm2 delete 0
//刪除程序
pm2 list
//查看程序列表
相關文章
相關標籤/搜索