一、工作原理

当通过浏览器访问app.js建立的服务器时,会看到一个简单的页面,实际上它已经完成了许多透明的工作,
当访问http://localhost:3000,浏览器会向服务器发送请求,包括请求的方法、路径、HTTP协议版本和请求头信息。app会解析请求的路径,调用相应的逻辑,app.js中有app.get("/",routes.index)通过res.render("index",{title:"pcat"})调用视图模版index,传递title变量,最终视图生成HTML页面,返回给浏览器。
浏览器接收到内容后,通过分析需要获取/stylesheets/style.css,因此会再次向服务器发起请求,app.js并没有一个路由规则指派到/stylessheets/style.css,但app通过app.use(express.static(__dirname+'/public'))配置了静态文件服务器,因此会定向到app.js所在目录下的/public/stylessheets/style.css拿去这个文件。
这是一个典型的MVC架构,浏览器发送请求,由路由控制接受,根据不同的路径定向到不同的服务器,控制器处理用户具体的请求,可能会访问数据库中的对象,即模型部分,生成视图的HTML,最后再由控制器返回给浏览器,完成一次请求。

二、创建路由规则

当我们在浏览器访问http://localhost:3000/pcat的时候,服务器响应头返回404 Not found错误
这是因为/pcat是一个不存在的路由规则,而且它也不是一个public目录下的文件,所以响应404
假设我们创建一个/pcat的的路由规则。
app.get("/pcat",routes.pcat)。在index.js中增加函数pcat
exports.pcat=function(req,res){
res.send('The time is '+new Date().toString());
}
服务器在开始监听之前,设置好了所有的路由规则,当请求到达时直接分配到相应函数。app.get是路由规则创建函数,
参数一:请求的路径
参数二:是一个回调函数,该路由规则被触发时调用回调函数,并传递req(请求信息)和res(响应信息)两个参数。

三、路径匹配

上面讲到了为固定的路径设置路由规则,Express还提供更高级的路径匹配模式。
1.app.get('/user/:username',function(req,res){
res.send("user :"+req.params.username);
});
路径规则/user/:username会被自动编译成正则表达式,类似于\/user\/([^\/]+)\/?这样的形式,路径参数可以相应函数中通过req.params的属性访问
2.路径规则同样支持javascript正则表达式,例如:app.get(\/user\/([^\/]+)\/?,callback),这样的好处在于可以定义更加复杂的路径规则,不同支持是配置的参数是匿名的,因此需要通过req.params[0]这样的形式访问。

四、REST风格的路由规则

Express支持REST风格的请求方式,REST意思是表征状态转移,它是一种基于HTTP协议的网络应用的接口风格,充分利用HTTP的方法实现了统一风格的接口和服务,HTTP协议定义了一下8个标准方法:
         GET:请求获取指定的资源       获取
        POST:向指定资源提交数据       新增
        DELETE:请求服务器删除指定资源     删除
         PUT:请求服务器存储一个资源              更新      
HEAD:请求指定资源的响应头
TRACE:回显服务器数到的请求,主要用户测试或诊断
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS:返回服务器支持的HTTP请求方法
所谓安全指的是连续访问多次所获得的结果不受访问者的影响。而幂等指的是重复请求多次与一次请求的效果是一样的,比如获取、更新和删除操作是幂等,这与新增不同。
Express对每种HTTP请求方法都设计了不同的路由绑定函数,例如前面全部是app.get,标识该路径绑定了GET请求,向这个路径发起其他方式的请求不会被响应。
GET     app.get(path,callback)
POST     app.post(path,callback)
PUT     app.put(path,callback)
DELETE     app.delete(path,callback)
...
...
    所有方法   app.all(path,callback,next)
怎么使用?
绑定一个POST请求,可以使用app.post(path,callback)的方法设置路由规则。
app.all函数,它支持把所有的请求方法都绑定到同一个相应函数,是一个非常灵活的函数。

五、控制权转移

Express支持同一路径绑定多个相应函数
app.all('/test/:user',function(req,res,next){
//我们在这里验证用户名是否存在。
//如果存在直接send或者调用next(new Error('用户已经存在'));
//如果不存在我们调用next()把控制权交给下一个路由规则
console.log("all methods is call");
next();
res.send('哈哈');
});
app.get('/test/:user',function(req,res){
res.send("user:"+req.pararms.user)
})
但是我们访问都会只返回一次。
Exress提供了路由控制权转移的方法,即next()函数,通过调用则将控制权交给后面的规则。

node.js路由控制相关推荐

  1. Node.js 路由的简单使用

    创建router.js 文件代码: function route(pathname) {console.log("About to route a request for " + ...

  2. Node.js:路由

    ylbtech-Node.js:路由 1.返回顶部 1. Node.js 路由 我们要为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码. 因 ...

  3. Node.js 入门知识点总结

    Noed.js 快速入门 前言 node.js 入门 环境配置 hello node.js node.js 获取参数 node.js 模块系统 node.js 路由 node.js 文件操作 使用 n ...

  4. 学习node js 之微信公众帐号接口开发 准备工作

    绪:因工作须要,近期開始学习Node js,之前隐隐约约听到过node js 但没有实际见到过,仅仅好google了:至于什么是node js,能做些什么,有多么好.或者有哪些弊端我这里就不多说了,由 ...

  5. node js 写按键精灵_带有按键的Node.js Raw模式

    node js 写按键精灵 I find the stuff that people are doing with Node.js incredibly interesting.  You here ...

  6. 【Node.js】 基础语法

    目录 Node.js npm package.json 字符编码 REPL Buffer(缓冲区) 函数 回调函数 模块系统 Express 框架 全局对象 console process Strea ...

  7. 2021了,真的不要再说 Node.js 是一门编程语言了

    Node.js 全栈基础 1. Node.js 光速入门 1.1 Node.js 概述 Node.js 是什么 Node.js 不是一门编程语言,它是一个执行 JavaScript 代码的工具.工具是 ...

  8. node.js 笔记

    目录 项目需求分析 node.js 是怎么跑起来的?它的底层实现是如何的? 安装 node.js,配置 node.js 环境 Node.js 应用是由哪几部分组成的: 创建 Node.js 第一个 & ...

  9. Node.js「四」—— 路由 / EJS 模板引擎 / GET 和 POST

    本文为 Node.js 系列笔记第四篇.文章参考:nodejs 教程:<深入浅出 Node.js>:阮一峰 nodejs 博客: Node.js v16.13.0 文档 文章目录 一.路由 ...

最新文章

  1. 3大主流前端框架对比
  2. 虚拟化笔记05 OpenFiler configuration
  3. 获取web.py上面的示例code
  4. SAP Fiori Elements List Report 列表宽度决定逻辑的单步调试
  5. 如何通过CSS开启硬件加速来提高网站性能
  6. JavaWeb笔记04-解决GET与POST乱码问题
  7. 拖来拖去今天终于重装系统了
  8. c语言switch的作用域,你真的懂switch吗?聊聊switch语句中的块级作用域
  9. could not find or load the Qt platform plugin xcb
  10. GPT-J 自然语言处理 AI 模型
  11. win7设置固定IP重启后无法上网,ipconfig显示为自动配置IPV4 169.254的地址
  12. 驰骋工作流-表单设计-从表多表头-功能讲解
  13. mysql数据库修复工具_MySQL数据库修复软件(Recovery Toolbox for MySQL)
  14. 台式电脑主板插线步骤图_图解电脑主机电源线接法图解
  15. 毕达哥拉斯的数字和定理 -逻辑与算法之四
  16. 使用grep命令抓取报: memory exhausted(内存耗尽)
  17. php 织梦手册,Dede标签快速手册
  18. 离开汽车之家和新车评,那些我们喜欢的车评人会活的更好
  19. 什么东西比地球上的沙子还要多?
  20. 北京积分落户分数线会一年比一年高?

热门文章

  1. 冒泡和快速排序的时间复杂度_八大排序算法性能分析及总结
  2. 计算机专业网站的开题ppt,.计算机专业开题报告.ppt
  3. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
  4. 微信小程序图片删除php,关于微信小程序中图片处理的问题总结
  5. 【LeetCode笔记】98. 验证二叉搜索树(Java、dfs、中序遍历、二叉树)
  6. 安卓软件错误log_Android编程实现捕获程序异常退出时的错误log信息功能详解
  7. linux设置系统自动开机,Linux系统中设置开机自动运行的两种方法
  8. element ui 多个子组件_ElementUI 技术揭秘(2) 组件库的整体设计
  9. linux 修改块大小,linux 查看及修改os系统块的大小
  10. 单片机搭建环境烧录方法_单片机仿真器的工作原理解析