Node.js学习笔记(十一、路由)

简介: Node.js学习笔记(十一、路由)

Node.js 路由

路由是干什么的?

路由是通过设置路径访问相应的函数。

为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码。

需要的数据从http请求中来,包含在request对象中,为了解析这些数据,需要额外的Node.JS模块,它们分别是url和querystring模块。

url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/listCategory
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]

对server.js进行改造:

var http = require("http"); 
var url = require("url"); 
function start(route, handle) { 
  function onRequest(request, response) { 
    var pathname = url.parse(request.url).pathname;      //获取路径
    var html = route(handle, pathname); 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write(html); 
    response.end(); 
  } 
  http.createServer(onRequest).listen(8888); 
  console.log("Server has started.");
} 
exports.start = start; 

路由router.js

function route(handle, pathname) { 
  if (typeof handle[pathname] === 'function') { 
    return handle[pathname](); 
  } else {
    return pathname + ' is not defined';
  } 
} 
exports.route = route; 

业务处理模块 requestHandlers.js

提供两个函数,返回不同的字符串。

//业务处理模块
function listCategory() { 
    return "a lot of categorys";
} 
function listProduct() { 
    return "a lot of products";
} 
exports.listCategory = listCategory; 
exports.listProduct = listProduct; 

入口主模块 index.js

与以往启动使用 server.js不同,带路由功能,一般都会通过 index.js 启动,所以index.js 就是入口模块。

handle 是一个数组,映射了不同的访问路径与 业务处理模块对应函数的一一对应关系。

handle["/listCategory"] = requestHandlers.listCategory;  

这就表示访问路径 /listCategory的话,就会交给函数 requestHandlers.listCategory 来处理。

var server = require("./server"); 
var router = require("./router"); 
var requestHandlers = require("./requestHandlers"); 
var handle = {} 
handle["/listCategory"] = requestHandlers.listCategory; 
handle["/listProduct"] = requestHandlers.listProduct; 
server.start(router.route, handle); 

启动访问

通过访问入口主模块:

node index.js

image.png

访问:

image.png

过程

1、启动index.js

2、index.js 调用了 server.start 函数,并且传递了 router.js 里route 函数和handle数组作为参数

3. serverl.js 通过了8888端口启动了服务。 然后用 onRequest 函数来处理业务

3.1 在 onRequest 中,首先获取 访问路径 pathname

3.2 然后调用 router.js 的route 函数,并把pathname 和 handle数组传递进去

4. 在router.js 中,通过pathname为下标获调用真正的业务函数,并把业务函数的返回值返回出去。

4.1 如果找不到,比如访问 /listUser 这个路径就没有在 handle 数组中找到对应,那么就会返回 listUser is not defined.

5. 当访问地址是 /listCategory的时候, 真正的业务函数 requestHandlers.js 中的 listCategory() 就会被调用,并返回业务 Html 代码 : “a lots of categorys”。

比最初的访问要复杂一些,但是便于拓展功能模块。如果开发了新的模块,只需要在index.js中添加相应映射就行了。

参考:

【1】、http://how2j.cn/k/nodejs/nodejs-router/1763.html

【2】、https://www.runoob.com/nodejs/nodejs-router.html

【3】、https://www.w3cschool.cn/nodejs/nodejs-router.html


目录
相关文章
|
4月前
|
JavaScript 前端开发 开发者
Vue.js 框架大揭秘:响应式系统、组件化与路由管理,震撼你的前端世界!
【8月更文挑战第27天】Vue.js是一款备受欢迎的前端JavaScript框架,以简洁、灵活和高效著称。本文将从三个方面深入探讨Vue.js:响应式系统、组件化及路由管理。响应式系统为Vue.js的核心特性,能自动追踪数据变动并更新视图。例如,通过简单示例代码展示其响应式特性:`{{ message }}`,当`message`值改变,页面随之自动更新。此外,Vue.js支持组件化设计,允许将复杂界面拆分为独立且可复用的组件,提高代码可维护性和扩展性。如创建一个包含标题与内容的简单组件,并在其他页面中重复利用。
85 3
|
1月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
74 1
|
2月前
|
JavaScript
Node.js 路由
10月更文挑战第5天
27 2
|
2月前
|
JavaScript 前端开发 API
前端技术分享:Vue.js 动态路由与守卫
【10月更文挑战第1天】前端技术分享:Vue.js 动态路由与守卫
|
2月前
|
资源调度 JavaScript UED
如何使用Vue.js实现单页应用的路由功能
【10月更文挑战第1天】如何使用Vue.js实现单页应用的路由功能
|
3月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
197 14
|
3月前
|
JavaScript 前端开发 API
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
|
3月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之node-export
prometheus 监控 node-exporter
|
3月前
|
Web App开发 前端开发 JavaScript
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
|
2月前
|
JavaScript 前端开发
【干货分享】JavaScript学习笔记分享
【干货分享】JavaScript学习笔记分享
63 0