亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

characters

概述

Express 4區(qū)別于Express 3有重大改變。這意味著如果您依賴于更新Express版本,現(xiàn)有的Express 3應(yīng)用程序?qū)?em style="font-style: italic;">無法工作。

本文涵蓋:

  • Express 4中的更改

  • 將Express 3應(yīng)用程序遷移到Express 4的示例。

  • 升級到Express 4應(yīng)用程序生成器。

Express 4中的更改

Express 4有幾個重大變化:

  • Express核心和中間件系統(tǒng)的變化。Connect和內(nèi)置中間件的依賴關(guān)系已被刪除,因此您必須自己添加中間件。

  • 路由系統(tǒng)的變化。

  • 各種其他變化。

也可以看看:

  • 4.x中的新功能

  • 從3.x遷移到4.x.

Express核心和中間件系統(tǒng)的變化

Express 4不再依賴于Connect,并從內(nèi)核中移除所有內(nèi)置中間件,express.static功能除外。這意味著Express現(xiàn)在是一個獨立的路由和中間件Web框架,Express版本和發(fā)行版不受中間件更新的影響。

沒有內(nèi)置的中間件,您必須明確添加運行您的應(yīng)用程序所需的所有中間件。只需遵循以下步驟:

  1. 安裝模塊: npm install --save <module-name>

2. 在你的應(yīng)用中,需要模塊: require('module-name')

3. 根據(jù)其文檔使用該模塊: app.use( ... )

下表列出了Express 4中的Express 3中間件及其對應(yīng)件。

Express 3

Express 4

express.bodyParser

body-parser + multer

express.compress

compression

express.cookieSession

cookie-session

express.cookieParser

cookie-parser

express.logger

morgan

express.session

express-session

express.favicon

serve-favicon

express.responseTime

response-time

express.errorHandler

errorhandler

express.methodOverride

method-override

express.timeout

connect-timeout

express.vhost

vhost

express.csrf

csurf

express.directory

serve-index

express.static

serve-static

以下是Express 4中間件的完整列表。

在大多數(shù)情況下,您可以簡單地使用其Express 4版本替換舊版本3中間件。有關(guān)詳細(xì)信息,請參閱GitHub中的模塊文檔。

app.use accepts parameters

在版本4中,您可以使用可變參數(shù)來定義加載中間件功能的路徑,然后從路由處理程序讀取參數(shù)的值。例如:

app.use('/book/:id', function (req, res, next) {
  console.log('ID:', req.params.id)  next()})

路由系統(tǒng)

應(yīng)用程序現(xiàn)在隱式加載路由中間件,因此您不必?fù)?dān)心中間件與中間件相關(guān)的加載順序router

您定義路線的方式不變,但路線系統(tǒng)有兩個新功能可幫助組織您的路線:

  • 一種新方法,app.route()為路徑路徑創(chuàng)建可鏈接的路由處理程序。

  • 一個新的類,express.Router創(chuàng)建模塊化可掛載路由處理程序。

app.route() method

app.route()方法使您能夠為路徑路徑創(chuàng)建可鏈接的路由處理程序。由于路徑是在單個位置指定的,因此創(chuàng)建模塊化路線很有幫助,因為這可以減少冗余和拼寫錯誤。有關(guān)路線的更多信息,請參閱Router()文檔。

以下是使用app.route()函數(shù)定義的鏈接路由處理程序的示例。

app.route('/book')  .get(function (req, res) {
    res.send('Get a random book')  })  .post(function (req, res) {
    res.send('Add a book')  })  .put(function (req, res) {
    res.send('Update the book')  })

express.Router class

另一個有助于組織路由的功能是一個新類,express.Router您可以使用它創(chuàng)建模塊化可掛載的路由處理程序。一個Router實例是一個完整的中間件和路由系統(tǒng); 由于這個原因,它通常被稱為“迷你應(yīng)用程序”。

以下示例將路由器創(chuàng)建為模塊,加載中間件,定義一些路由,并將其安裝在主應(yīng)用的路徑上。

例如,創(chuàng)建一個名為birds.jsapp目錄中的路由器文件,其中包含以下內(nèi)容:

var express = require('express')
var router = express.Router()
// middleware specific to this router
router.use(function timeLog (req, res, next) {
  console.log('Time: ', Date.now())  next()})
  // define the home page route
  router.get('/', function (req, res) {
  res.send('Birds home page')})
  // define the about route
  router.get('/about', function (req, res) {
  res.send('About birds')})
  module.exports = router

然后,在應(yīng)用程序中加載路由器模塊:

var birds = require('./birds')// ...app.use('/birds', birds)

該應(yīng)用程序現(xiàn)在將能夠處理請求的/birds/birds/about路徑,并調(diào)用特定的路線的timeLog中間件。

其他變化

下表列出了Express 4中的其他小而重要的更改:

對象

描述

Node.js

Express 4需要Node.js 0.10.x或更高版本,并且已經(jīng)放棄了對Node.js 0.8.x的支持。

http.createServer()

不再需要http模塊,除非您需要直接使用(socket.io/SPDY/HTTPS)。該應(yīng)用程序可以通過使用app.listen()函數(shù)啟動。

app.configure()

app.configure()函數(shù)已被刪除。使用process.env.NODE_ENV或app.get('env')函數(shù)檢測環(huán)境并相應(yīng)地配置應(yīng)用程序。

json spaces

Express 4中默認(rèn)禁用json spaces應(yīng)用程序?qū)傩浴?/p>

req.accepted()

使用req.accepts(),req.acceptsEncodings(),req.acceptsCharsets()和req.acceptsLanguages()。

res.location()

不再解析相對URL。

req.params

過去是數(shù)組; 現(xiàn)在是對象。

res.locals

過去是功能; 現(xiàn)在是對象。

res.headerSent

已更改為res.headersSent。

app.route

現(xiàn)在可用作app.mountpath。

res.on('header')

已刪除。

res.charset

已刪除。

res.setHeader('Set-Cookie', val)

現(xiàn)在功能限于設(shè)置基本的cookie值。使用res.cookie()來增加功能。

應(yīng)用遷移示例

以下是將Express 3應(yīng)用程序遷移到Express 4的示例。感興趣的文件有app.jspackage.json

版本3的應(yīng)用程序

app.js

考慮使用以下app.js文件的Express v.3應(yīng)用程序:

var express = require('express')var routes = require('./routes')var user = require('./routes/user')var http = require('http')var path = require('path')var app = express()// all environmentsapp.set('port', process.env.PORT || 3000)app.set('views', path.join(__dirname, 'views'))app.set('view engine', 'pug')app.use(express.favicon())app.use(express.logger('dev'))app.use(express.methodOverride())app.use(express.session({ secret: 'your secret here' }))app.use(express.bodyParser())app.use(app.router)app.use(express.static(path.join(__dirname, 'public')))// development onlyif (app.get('env') === 'development') {
  app.use(express.errorHandler())}app.get('/', routes.index)app.get('/users', user.list)http.createServer(app).listen(app.get('port'), function () {
  console.log('Express server listening on port ' + app.get('port'))})

package.json

附加的版本3 package.json文件可能如下所示:

{  
    "name": "application-name",  
    "version": "0.0.1",  
    "private": true,  
    "scripts": {    "start": "node app.js"  },  
    "dependencies": {    "express": "3.12.0",    "pug": "*"  }
    }

處理

通過安裝Express 4應(yīng)用程序所需的中間件并使用以下命令將Express和Pug更新為各自的最新版本,開始遷移過程:

$ npm install serve-favicon morgan method-override express-session body-parser multer errorhandler express@latest pug@latest --save

對以下內(nèi)容更改至app.js

  1. 內(nèi)置的快速中間件功能express.faviconexpress.logger,express.methodOverride,express.session,express.bodyParserexpress.errorHandler不再是可用的express對象。您必須手動安裝替代品并將其加載到應(yīng)用程序中。

2. 您不再需要加載app.router功能。它不是有效的Express 4應(yīng)用程序?qū)ο?,因此刪除app.use(app.router);代碼。

3. 確保中間件功能以正確的順序加載 - 加載errorHandler應(yīng)用程序路徑后加載。

版本4應(yīng)用程序

package.json

運行上述npm命令將更新package.json如下:

{  "name": "application-name",  "version": "0.0.1",  "private": true,  "scripts": {    "start": "node app.js"  },  "dependencies": {    "body-parser": "^1.5.2",    "errorhandler": "^1.1.1",    "express": "^4.8.0",    "express-session": "^1.7.2",    "pug": "^2.0.0",    "method-override": "^2.1.2",    "morgan": "^1.2.2",    "multer": "^0.1.3",    "serve-favicon": "^2.0.1"  }}

app.js

然后,刪除無效代碼,加載所需的中間件,并根據(jù)需要進(jìn)行其他更改。該app.js文件將如下所示:

var http = require('http')
var express = require('express')
var routes = require('./routes')
var user = require('./routes/user')
var path = require('path')
var favicon = require('serve-favicon')
var logger = require('morgan')
var methodOverride = require('method-override')
var session = require('express-session')
var bodyParser = require('body-parser')
var multer = require('multer')
var errorHandler = require('errorhandler')
var app = express()
// all environments
app.set('port', process.env.PORT || 3000)
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'pug')
app.use(favicon(path.join(__dirname, '/public/favicon.ico')))
app.use(logger('dev'))
app.use(methodOverride())
app.use(session({ resave: true,
                  saveUninitialized: true,
                  secret: 'uwotm8' }))
                  app.use(bodyParser.json())
                  app.use(bodyParser.urlencoded({ extended: true }))
                  app.use(multer())
                  app.use(express.static(path.join(__dirname, 'public')))
                  app.get('/', routes.index)app.get('/users', user.list)
                  // error handling middleware should be loaded after the loading the routes
                  if (app.get('env') === 'development') {
                  app.use(errorHandler())}
  var server = http.createServer(app)server.listen(app.get('port'), function () {
  console.log('Express server listening on port ' + app.get('port'))})

除非您需要直接使用http模塊(socket.io/SPDY/HTTPS),否則不需要加載它,并且可以通過以下方式簡單地啟動應(yīng)用程序:

app.listen(app.get('port'), function () {
  console.log('Express server listening on port ' + app.get('port'))})

運行應(yīng)用程序

遷移過程已完成,該應(yīng)用現(xiàn)在是Express 4應(yīng)用。要確認(rèn),請使用以下命令啟動應(yīng)用程序:

$ node .

加載http:// localhost:3000 并查看由Express 4渲染的主頁。

升級到Express 4應(yīng)用程序生成器

用于生成Express應(yīng)用程序的命令行工具仍然存在 express,但要升級到新版本,您必須卸載Express 3應(yīng)用程序生成器,然后安裝新的 express-generator。

安裝

如果您的系統(tǒng)中已安裝Express 3應(yīng)用程序生成器,則必須將其卸載:

$ npm uninstall -g express

根據(jù)文件和目錄權(quán)限的配置方式,可能需要使用此命令運行sudo。

現(xiàn)在安裝新的發(fā)生器:

$ npm install -g express-generator

根據(jù)文件和目錄權(quán)限的配置方式,可能需要使用此命令運行sudo。

現(xiàn)在express系統(tǒng)上的命令被更新為Express 4生成器。

對應(yīng)用程序生成器的更改

命令選項和用法在很大程度上保持不變,但有以下例外:

  1. 刪除了--sessions選項。

2. 刪除了--jshtml選項。

3. 增加了--hogan支持Hogan.js的選項。

示例

執(zhí)行以下命令來創(chuàng)建Express 4應(yīng)用程序:

$ express app4

如果您查看app4/app.js文件的內(nèi)容,您會注意到express.static應(yīng)用程序所需的所有中間件功能(除外)都作為獨立模塊加載,并且router中間件不再顯式加載到應(yīng)用程序中。

您還會注意到,app.js文件現(xiàn)在是一個Node.js模塊,與舊生成器生成的獨立應(yīng)用程序相反。

安裝依賴關(guān)系后,使用以下命令啟動應(yīng)用程序:

$ npm start

如果您查看文件中的npm start腳本package.json,您會注意到啟動應(yīng)用程序的實際命令是node ./bin/www,而不是以前在Express 3中的node app.js命令。

由于Express 4生成器生成的文件app.js現(xiàn)在是Node.js模塊,因此不能再作為應(yīng)用程序獨立啟動(除非您修改代碼)。該模塊必須加載到Node.js文件中并通過Node.js文件啟動。Node.js文件就是./bin/www這種情況。

無論是創(chuàng)建快速應(yīng)用程序還是啟動應(yīng)用程序,bin目錄和擴(kuò)展名www文件都不是必需的。他們只是建議,所以隨時修改它們以滿足您的需求。

要刪除www目錄并保留“Express 3 way”,請刪除文件module.exports = app;末尾的行app.js,然后將以下代碼粘貼到它的位置:

app.set('port', process.env.PORT || 3000)
var server = app.listen(app.get('port'), function () {  debug('Express server listening on port ' + server.address().port)})

確保使用以下代碼debugapp.js文件頂部加載模塊:

var debug = require('debug')('app4')

接下來,將package.json文件中的"start": "node ./bin/www"更改為"start": "node app.js"

您現(xiàn)在已將./bin/www功能移回app.js。此更改并不推薦,但練習(xí)可幫助您了解./bin/www文件的工作方式以及app.js文件不再自行啟動的原因。

Previous article: Next article: