位置: 编程技术 - 正文

nodejs开发——express路由与中间件(nodejs开发文档)

编辑:rootadmin

推荐整理分享nodejs开发——express路由与中间件(nodejs开发文档),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs开发实战,nodejs项目开发,nodejs项目开发,node js 开发,nodejs项目开发,node js 开发,node js 开发,nodejs开发exe,内容如对您有帮助,希望把文章链接给更多的朋友!

路由

通常HTTP URL的格式是这样的:

Resource Identifier,统一资源定位符),如果URL中没有给出path,一般会默认成“/”(通常由浏览器或其它HTTP客户端完成补充上)。

所谓路由,就是如何处理HTTP请求中的路径部分。比如“ &#;、+、* 和 () 是正则表达式的子集,- 和 . 在基于字符串的路径中按照字面值解释。

使用正则表达式的路由路径示例:

路由句柄

可以为请求处理提供多个回调函数,其行为类似 中间件。唯一的区别是这些回调函数有可能调用 next('route') 方法而略过其他路由回调函数。可以利用该机制为路由定义前提条件,如果在现有路径上继续执行没有意义,则可将控制权交给剩下的路径。

路由句柄有多种形式,可以是一个函数、一个函数数组,或者是两者混合,如下所示.

使用一个回调函数处理路由:

使用多个回调函数处理路由(记得指定 next 对象):

使用回调函数数组处理路由:

混合使用函数和函数数组处理路由:

METHOD可以是GET、POST等HTTP方法的小写,例如app.get,app.post。path部分呢,既可以是字符串字面量,也可以是正则表达式。最简单的例子,把前面代码里的app.get()调用的一个参数'/'修改为'*',含义就不一样。改动之前,只有访问“ World!”,而改之后呢,像“ World!”。

使用express构建Web服务器时,很重要的一部分工作就是决定怎么响应针对某个路径的请求,也即路由处理。

最直接的路由配置方法,就是调用app.get()、app.post()一条一条的配置,不过对于需要处理大量路由的网站来讲,这会搞出人命来的。所以呢,我们实际开发中需要结合路由参数(query string、正则表达式、自定义的参数、post参数)来减小工作量提高可维护性。更详细的信息,参考 URI为“/”。path是一个Node.js模块,__dirname是Node.js的全局变量,指向当前运行的js脚本所在的目录。path.join()则用来拼接目录。

有了上面的代码,你就可以在浏览器里访问“ 什么是router路径,什么是middleware?

我们输入www.baidu.com 来访问百度的主页,浏览器会自动转换为 代表的是服务器的主机地址,会被我们的pc通过DNS解析为IP地址。是默认的应用层端口。/ 即为我们访问的服务器(www.baidu.com)的路径,服务器要对我们访问的这个路径做出响应,采取一定的动作。我们可以把这一过程看做一个路由。

访问的路径‘/'即为router的路径,服务器采取的动作即为middleware,即为一个个特殊的函数。

nodejs开发——express路由与中间件(nodejs开发文档)

2. router路径

www.baidu.com/test: 路径为 /test

www.baidu.com/test&#;name=1&number=2: 路径同样为/test, &#;后面会被服务器理解传给路径的参数。

3. Middleware

An Express application is essentially a stack of middleware which are executed serially.(express应用其实就是由一系列顺序执行的Middleware组成。)

A middleware is a function with access to the request object (req), the response object (res), and the next middleware in line in the request-response cycle of an Express application. It is commonly denoted by a variable named next. Each middleware has the capacity to execute any code, make changes to the request and the reponse object, end the request-response cycle, and call the next middleware in the stack. Since middleware are execute serially, their order of inclusion is important.(中间件其实就是一个访问express应用串入的req,res,nex参数的函数,这个函数可以访问任何通过req,res传入的资源。)

If the current middleware is not ending the request-response cycle, it is important to call next() to pass on the control to the next middleware, else the request will be left hanging.(如果当前中间件没有完成对网页的res响应 ,还可以通过next把router 留给下一个middleware继续执行)

With an optional mount path, middleware can be loaded at the application level or at the router level. Also, a series of middleware functions can be loaded together, creating a sub-stack of middleware system at a mount point.

路由的产生是通过HTTP的各种方法(GET, POST)产生的,Middleware可以跟router路径跟特定的HTTP方法绑定,也可以跟所有的方法绑定。

3.1 通过express应用的use(all),把Middleware同router路径上的所有HTTP方法绑定:

3.2 通过express应用的http.verb,把Middleware同router路径上的特定的HTTP方法绑定:

4. Express的Router对象

当express实例的路由越来越多的时候,最好把路由分类独立出去,express的实例(app) 能更好的处理其他逻辑流程。Express的Router对象是一个简化的 app实例,只具有路由相关的功能,包括use, http verbs等等。最后这个Router再通过app的use挂载到app的相关路径下。

router的路由必须通过app.use和app.verbs 挂载到app上才能被响应。所以上述代码,只有在app捕捉到 /foo路径上的路由时,才能router中定义的路由,虽然router中有针对 '/' 的路由,但是被app中的路由给覆盖了。

附:app.verbs和app.use的路由路径区别:

先看一段测试代码:

输入url: localhost:

输出结果:test1

输入url: localhost:/hello

输出结果:test2

结论:app.get挂载‘/'的路由只响应跟'/'精确匹配的GET请求。 而app.use挂载的'/'的路由响应所有以'/' 为起始路由的路由,且不限制HTTP访问的方法。以下说明:Mounting a middleware at a path will cause the middleware function to be executed whenever the base of the requested path matches the path.

标签: nodejs开发文档

本文链接地址:https://www.jiuchutong.com/biancheng/377891.html 转载请保留说明!

上一篇:Node.js和Express简单入门介绍(node和javascript)

下一篇:简单好用的nodejs 爬虫框架分享(简单好用的记账app)

  • nginx+php-fpm配置文件的组织结构介绍(nginx apache php)

    nginx+php-fpm配置文件的组织结构介绍(nginx apache php)

  • SQL Server 2008用'sa'登录失败,启用'sa'登录的解决办法

    3.右键实例-->【重新启动】

    4.选择【安全性】-->【登录名】-->【sa】

    5.双击【sa】,出现下面视图,点击【常规】,设置新的密码

    Notice: Undefined index: CMSdown in /data/webroot/gcms/lib/Api/Open/Article.php on line img////_a1ad.png" class="img-responsive" alt="SQL Server 2008用'sa'登录失败,启用'sa'登录的解决办法">

    SQL Server 2008用'sa'登录失败,启用'sa'登录的解决办法

  • 利用Prometheus与Grafana对Mysql服务器的性能监控详解(prometheus operator)

    利用Prometheus与Grafana对Mysql服务器的性能监控详解(prometheus operator)

  • 基于Jquery+div+css实现弹出登录窗口(代码超简单)(基于重大误解实施的民事法律行为)

    基于Jquery+div+css实现弹出登录窗口(代码超简单)(基于重大误解实施的民事法律行为)

  • 防止shell脚本重复执行的代码(防止shell命令注入)

    防止shell脚本重复执行的代码(防止shell命令注入)

  • 基于jquery编写的放大镜插件(jquery教程实例)

    基于jquery编写的放大镜插件(jquery教程实例)

  • 公司食堂辅助账怎么记账
  • 发票验证码和校验码是一样的吗
  • 独立核算的优点
  • 上市公司现金流充足说明什么
  • 转移性支出包括上解上级支出
  • 小规模纳税人改为一般纳税人需要什么材料
  • 合并报表长期股权投资怎么算
  • 库存冲红是什么意思
  • 个税的滞纳金怎么算
  • 补贴收入计入哪个科目
  • 企业微信收款如何同步给别人
  • 外贸企业留抵税额过大
  • 公司增资麻烦吗?
  • 商品已发出未开票未收款怎么做账
  • 购买方退货的会计处理
  • 迁移税务需要带什么资料
  • 房地产开发企业会计科目
  • 递延所得税怎么计提
  • 房地产预收账款结转到主营业务收入
  • 金蝶kis云专业版原材料数量怎么录入
  • 审计的内容是什么
  • 账上少了25元怎么做账
  • 小微企业季度超过45万填报增值税
  • 应收账款坏账有什么措施改善
  • 营业收入存入银行分录
  • 净利润分配股利的会计分录
  • xlsx长数字
  • 交割单和对账单一样吗
  • 上网的操作
  • php oci
  • php call方法
  • php面向对象是什么意思
  • 公司比赛奖金计入什么科目
  • php的mysql_query
  • element-ui表格
  • laravel引入css
  • frameworkscheduled
  • 自产自销农产品发票如何开具
  • 发票开错需要让客户寄回来吗
  • win11更新71
  • php消除警告
  • 个税专项附加扣除具体怎么操作
  • 开基本户一定要法人身份证吗
  • 暂估入库的金额与发票金额不一样
  • python命令行如何退出
  • 缴纳税收的凭证怎么打印
  • 一般劳务报酬个人所得税退税吗
  • 公司购买手表可以做费用吗?
  • 尚未使用或出租而待售的商品房需要交房产税吗
  • 关于发票冲账应该怎么写
  • 利润分配未分配利润账务处理
  • 期初固定资产算收入吗
  • 以前年度财务费用漏记
  • 购买扶贫产品属于什么费用
  • 过路费属于差旅费还是办公费
  • 现金流量表的编制基础是权责发生制
  • 留存收益与未分配利润的关系
  • 填制凭证的主要内容和注意事项
  • 内帐外帐的区别与联系
  • mysql查询倒数第二个字母为a
  • 粘贴板有问题不能粘贴怎么处理
  • win xp怎么样
  • linux怎么用root运行命令
  • centos 安装教程
  • url什么意思啊了
  • django orm sqlalchemy
  • 只有一行的矩阵的逆矩阵
  • linux无法使用yum命令
  • 用js实现导航栏的下拉列表
  • javascript开发自学
  • c#属性窗口
  • js引用传递
  • 使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
  • jquery 滑动显示
  • python语言及应用
  • 阜阳市税务局地址
  • 山东省国家税务局威海培训中心
  • 国税局黑龙江省
  • 增值税税控开票软件密码不知道了怎么办
  • 税务系统个人业务自传
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设