更多的例子和完整的API文档,请参见Express 4.x 的文档。你可能对这篇文章也有兴趣 从3.x 迁移到 4.x版

移除了捆绑的中间件

Express 中不再捆绑 Connect 提供的中间件(或者说显示在 “express” 模块中)。你要使用的任何中间件应额外安装并在你的应用的 package.json 中列出。这方便了中间件的功能修复和快速更新,同时避免影响 express 的核心功能。 参见中间件模块,这张列表完整的列出了旧的 connect 中间件。

Router 的改进

express 现在提供了一个更好的“ Router ”功能以及路由 API ,来解决重复性的路由命名情况,并且更容易将路由分解到多个文件,方便项目组织和管理。

不再需要 app.use(app.router)

所有的路由功能都将按照它们出现的顺序被添加。你 不用 再使用app.use(app.router)。这解决了 Express 最常见的问题。 换句话说,混合的app.use()app[VERB]()确切地 按照它们的调用顺序工作。

app.get('/', home);
app.use('/public', require('st')(process.cwd()));
app.get('/users', users.list);
app.post('/users', users.create);

app.route(path)

取代了原本的app.get()app.post()等方式(但这些依然可以使用),提供了一个新的route()功能,它会返回一个可被使用的Route实例。然后,你可以在这个实例中调用所有的 HTTP 动作,甚至可以添加具体的中间件到这个路由中。

app.route('/users')
.get(function(req, res, next) {})
.post(function(req, res, next) {})

route()需要一个path路径参数,这个参数和你创建一个路由时传递给.get()或者.post()的参数相同。 此外,返回的路由有一个.all()方法,如果你想添加中间件到这个路由中,或处理所有的动作,这会很有帮助。

Router(路由)

另一项新增功能是 express 的Router的公共API。一个Router就像是一个小型的 express 应用。它不包含任何 view 或者 setting,但是确实提供了典型的路由API(.use.get.param.route)。 应用和路由也可以通过.use()方法使用其它路由,这允许你通过多个文件来建立路由,以更好地组织你的应用。 想象一下,在你的项目的一个例子routes/people.js

var people = express.Router();

people.use(function(req, res, next) {
});

people.get('/', function(req, res, next) {
});

module.exports.people = people;

您可以将其安装在/people路径下,这样的话,向/people/*的任何请求都将被发送到 people 路由。

app.use('/people', require('./routes/people').people);

更多的例子参见路由器文档