版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Cyan1614/article/details/73433951
路由就是根据提供的数据来执行相应的代码。
这也设计到了MVC设计模式,其主要思想是将业务逻辑按职责分离,主要分为以下几种。
(1)控制器(Controller),一组行为的集合。
(2)模型(Model),数据相关的操作和封装。
(3)视图(View),视图的渲染。
这是目前最经典的分层模式(如下图),大致而言,它的工作模式如下说明。
(1)路由分析,根据URL寻找到对应的控制器和行为。
(2)行为调用相关的模型,进行数据操作。
(3)数据操作结束后,调用视图和相关数据进行页面渲染,输出到客户端。
根据URL做到路由映射,这里有两个分支实现,一种方式是通过手工关联映射,一种是自然关联映射。前者会有一个对应的路由文件来将URL映射到对应的控制器,后者没有这样的文件。
手工映射除了需要手工配置路由外较为原始外,它对URL的要求十分灵活,几乎没有格式上的限制。
自然映射是用一种约定俗成的方式自然而然地实现了路由,而无须维护路由映射,并且这种方式没有指明参数名称,但是可以直接通过参数获取。
简单例子实现:
创建了一个Index.js文件,内容如下:
var server = require('./server');
server.start();
创建了一个server.js文件,内容如下:
var http = require('http');
var url = require('url');
var routerStart = require('./routerstart');
var routerUpdate = require('./routerupdate')
function start() {
function onRequest(request, response) {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
var pathName = url.parse(request.url);
if (pathName.pathname !== '/favicon.ico') {
if (pathName.pathname === '/') {
routerStart.router();
} else {
routerUpdate.router();
}
}
var str = JSON.stringify(pathName);
response.write(str);
response.end();
}
http.createServer(onRequest).listen(8080);
console.log('Server has started');
}
exports.start = start;
favicon.ico为浏览器在收藏夹中的默认图标,在判断中将其过滤。
创建了一个routerstart.js文件,内容如下:function router(){
console.log('start');
}
exports.router = router;
创建了一个routerupdate.js文件,内容如下:
function router(){
console.log('update');
}
exports.router = router;
运行index.js文件,结果如下:
$ node index.js
Server has started
进入127.0.0.1:8080后,默认的第一次请求,内容如下:
$ node index.js
Server has started
start
当输入一个测试URL后,内容如下:
$ node index.js
Server has started
start
update