Express 3.x 到 4.0 的遷移指南。你可能對這篇文章也有興趣4.x版中的新功能。html
更多的例子和完整的API文檔,請參見Express 4.x 的文檔。node
Express 4 再也不依賴 Connect 。這意味着全部捆綁的中間件(除了static
)都再也不能從express
模塊中被調用。這些中間件均可以做爲下面說起的模塊進行調用。這一變化是爲了讓這些中間件在獲取修復,更新和發佈的同時不影響 express 的發佈週期,反之亦然。git
其餘模塊在這裏 https://github.com/senchalabs/connect#middlewaregithub
這種方法再也不可用。若是你想配置基於環境的不一樣路由,使用 if 語句或替代模塊。express
app.configure('development', function() { // configure stuff here }); // 如今改成 var env = process.env.NODE_ENV || 'development'; if ('development' == env) { // configure stuff here }
這個中間件已經全面改版,以此避免.use
同.get
之間的混淆(或者是其餘HTTP動做),同時,再也不須要手動聲明的app.use(app.router)
(已被移除)。查看下面關於新的中間件和路由 API 的一節。json
若是你的代碼看起來像這樣:api
app.use(cookieParser()); app.use(bodyParser()); /// 其餘的中間件,並無影響 app.use(app.router); // <--- 這行會被移除 // 更多的中間件(在路由以後執行) app.use(function(req, res, next); // 處理錯誤的中間件 app.use(function(err, req, res, next) {}); app.get('/' ...); app.post(...);
app.router
已被移除,中間件和路由按照它們添加的順序被執行。在你的代碼中,你應該將本來在app.use(app.router)
以後的向app.use
的請求移動到其餘路由以後(HTTP動做)。數組
app.use(cookieParser()); app.use(bodyParser()); /// 其餘的中間件,並無影響 app.get('/' ...); app.post(...); // 更多的中間件(在路由後執行) app.use(function(req, res, next); // 處理錯誤的中間件 app.use(function(err, req, res, next) {});
長期棄用。如今只要使用`express()'建立一個新的應用。瀏覽器
除了express.static
爲了便捷性直接封裝在 express 中,其餘全部 connect 的中間件都被分離到了獨立的模塊中。由此,每一個獨立的模塊均可以擁有本身的版本控制。cookie
Connect 對 node 的原型進行了全局的改動。
這被認爲是不正確的,因此在 Connect 3 中已被移除。
其中一些補丁是:
res.on('header')
res.charset
res.headerSent
- use node's res.headersSent
instead你不該該在任何 Connect 或 Express 的庫中再使用這些。
若是你想快速設置默認的字符集(你確實應該這麼作),
使用 res.set('content-type')
或者 res.type()
來設置 header 。
當使用res.setHeader()
時,默認的字符集將不會添加。
app.use
如今能夠接受 :params
.
app.use('/users/:user_id', function(req, res, next) { // req.params.user_id 能夠正確獲取 });
使用req.accepts()
來代替。
req.accepts()
req.acceptsEncodings()
req.acceptsCharsets()
req.acceptsLanguages()
都在內部使用 accepts。
請參考accepts
來提交問題或者查看文檔。
請注意,這些屬性可能已經從數組改成函數。
要把它們做爲「數組」使用,只要不向它們傳遞任何參數便可。
例如, req.acceptsLanguages() // => ['en', 'es', 'fr']
.
再也不作相對路徑的 URL 解析。瀏覽器自身將處理相對路徑的 URL 。
當把一個 express 應用安裝到另外一個 express 應用中時。
json spaces
在開發模式下再也不默認啓用。如今它是一個對象而不是數組。若是你之前使用req.params[##]
的形式,這不會破壞你的應用,它能夠在不知道參數名的狀況下,使用正則來處理路由。
再也不是一個函數。如今這是一個普通的JS對象。因此把它看成普通的對象來處理。
改成headersSent
來匹配 node.js 的 ServerResponse 對象。你的應用可能並無使用到這個,所以它不會是一個問題。
如今在內部使用 type-is。
請參考type-is
來提交問題或者查看文檔。
返回一個新的Route
的實例。當收到和這個路由的path
相匹配的請求時,這個路由就會被調用。路由能夠有本身的中間件和針對 HTTP 動做的方法來處理請求。
請參閱路由和路由線路文檔,以便更好地瞭解如何在 express 中建立路由。
Router 已經全面改版,如今它是一個功能完善的中間件路由。Router 是在不犧牲參數匹配和中間件的狀況下,將你的路由分離到多個文件或者模塊的好方法。請參閱 Routes 及路由文檔 。