路由 创建Express项目 模板引擎 前面我们只是挂载了根路径的路由控制器,现在修改 index.js 如下: const express = require('express') const app = express() app.get('/', function (req, res) { res.send('hello, express') }) app.get('/users/:name', function (req, res) { res.send('hello, ' + req.params.name) }) app.listen(3000) 以上代码的意思是:当访问根路径时,依然返回 hello, express,当访问如 localhost:3000/users/nswbmw 路径时,返回 hello, nswbmw。路径中 :name 起了占位符的作用,这个占位符的名字是 name,可以通过 req.params.name 取到实际的值。 小提示:express 使用了 path-to-regexp : https://www.npmjs.com/package/path-to-regexp 模块实现的路由匹配。 不难看出:req 包含了请求来的相关信息,res 则用来返回该请求的响应,更多请查阅 express 官方文档。下面介绍几个常用的 req 的属性: req.query: 解析后的 url 中的 querystring,如 ?name=haha,req.query 的值为 {name: 'haha'} req.params: 解析 url 中的占位符,如 /:name,访问 /haha,req.params 的值为 {name: 'haha'} req.body: 解析后请求体,需使用相关的模块,如 body-parser,请求体为 {"name": "haha"},则 req.body 为 {name: 'haha'} 3.2.1 express.Router 上面只是很简单的路由使用的例子(将所有路由控制函数都放到了 index.js),但在实际开发中通常有几十甚至上百的路由,都写在 index.js 既臃肿又不好维护,这时可以使用 express.Router 实现更优雅的路由解决方案。在 myblog 目录下创建空文件夹 routes,在 routes 目录下创建 index.js 和 users.js。最后代码如下: index.js const express = require('express') const app = express() const indexRouter = require('./routes/index') const userRouter = require('./routes/users') app.use('/', indexRouter) app.use('/users', userRouter) app.listen(3000) routes/index.js const express = require('express') const router = express.Router() router.get('/', function (req, res) { res.send('hello, express') }) module.exports = router routes/users.js const express = require('express') const router = express.Router() router.get('/:name', function (req, res) { res.send('hello, ' + req.params.name) }) module.exports = router 以上代码的意思是:我们将 / 和 /users/:name 的路由分别放到了 routes/index.js 和 routes/users.js 中,每个路由文件通过生成一个 express.Router 实例 router 并导出,通过 app.use 挂载到不同的路径。这两种代码实现了相同的功能,但在实际开发中推荐使用 express.Router 将不同的路由分离到不同的路由文件中。 创建Express项目 模板引擎