一、路由定义
广义上来讲,路由就是映射关系。
nodejs中的路由其实就是url地址和响应函数之间的映射关系,一个url地址响应一个html页面。
就是将一个路径匹配关系的业务提取到一个单独的js文件当中.
二、路由功能
我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码。
因此,我们需要查看 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)确实值得探讨,但这里暂定其为我们的HTTP服务器的功能。
我们需要的所有数据都会包含在 request 对象中,该对象作为 onRequest() 回调函数的第一个参数传递。但是为了解析这些数据,我们需要额外的 Node.JS 模块,它们分别是 url 和 querystring 模块。
url.parse(string).query
|
url.parse(string).pathname |
| |
| |
------ -------------------
http://localhost:8888/start?foo=bar&hello=world
--- -----
| |
| |
querystring.parse(queryString)["foo"] |
|
querystring.parse(queryString)["hello"]
三、路由组织和模块化
对于大型的应用程序,路由通常会非常庞大而复杂。为了保持代码的可读性和可维护性,我们可以将路由进行组织和模块化。例如:
路由系统通常是建立在服务器端的,因为它需要处理客户端发送的 HTTP 请求。但是,也有一些客户端路由系统,它们可以在浏览器端使用。
在 Node.js 中,有许多不同的模块可用于创建路由系统。其中最流行的是 Express。Express 是一个简单而强大的框架,用于构建 Web 应用程序和 API。它提供了许多有用的功能,如路由、中间件、模板引擎和静态文件处理。
// router.js
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
// 处理 /users 请求
});
router.get('/:id', (req, res) => {
// 处理 /users/:id 请求
});
module.exports = router;
// app.js
const express = require('express');
const app = express();
const usersRouter = require('./router');
app.use('/router', usersRouter);
app.listen(3000, () => {
console.log('Server running on port 3000');
});
在上面的例子中,我们创建了一个名为 router.js
的模块,其中包含了与用户相关的路由处理函数。然后,在主应用程序(app.js
)中使用 app.use()
注册了这个模块。这样做不仅使代码结构更清晰,还能方便地扩展和维护。