Node.js之Express路由中间件

Posted z-royal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js之Express路由中间件相关的知识,希望对你有一定的参考价值。

1、Express框架

  ①介绍:基于Node.js平台,快速,开放,极简的web开发框架。

  ②安装

    node环境下,命令:npm  i  express  --save   

  ③入门使用

 1 // 引入
 2 const expree = require("express");
 3 // 实例化
 4 const app = express();
 5 // 监听“/world"的get请求,被访问,触发回调函数
 6 app.get("/world",(req,res)=>{
 7     res.send("hello");
 8 })
 9 // 监听端口
10 app.listen(2000);

2、路由

  所谓路由,就是如何处理HTTP请求中的路径部分。比如“http://baidu.com/users/user”这个URL,路由将决定怎么处理/users/user这个路径。

 1 // 引入
 2 const expree = require("express");
 3 // 实例化
 4 const app = express();
 5 // 监听“/world"的get请求,被访问,触发回调函数
 6 app.get("/users/user",(req,res)=>{
 7     res.send("hello");
 8 })
 9 // 监听端口
10 app.listen(2000);

  上面代码里的app.get()调用,实际上就是一条路由,指定“/users/user”这个路径由get的第二个参数所代表的函数来处理。

3、路由句柄

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

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

  Ⅰ、使用一个回调函数处理:

1 const expree = require("express");
2 const app = express();
3 app.get("/",(req,res)=>{    // 回调函数处理
4     res.send("hello");
5 })
6 app.listen(2000,()=>{
7     console.log("listen 2000");
8 })

  Ⅱ、使用一个函数数组处理:

 1 let  cb1 = function(req,res,next){
 2     console.log(‘1‘);
 3     next();
 4 };
 5 let cb2 = function(req,res,next){
 6     console.log(‘2‘);
 7     next();
 8 };
 9 let cb3 = function(req,res,next){
10     console.log(3);
11     next();
12 };
13 let cb4 = function(req,res,next){
14     console.log(4);
15     res.send(‘Hello from 4‘);
16 };
17  
18 app.get(‘/‘,[cb1,cb2]);    // 数组处理
19 app.get(‘/‘,[cb3,cb4]);    // 数组处理

  注:next用于执行下一个回掉函数,如果我们将回掉函数中任一next()给去掉,再次请求时,那么会一直处于挂起的状态,这是由于没有执行next函数,那么回掉函数不继续往下执行,这样就导致了没有对应的响应返回客户端;next(‘route‘) 用于执行下一个相同路由。

4、中间件

   所谓中间件,就是在收到请求后和发送响应之前这个阶段执行的一些函数。

  要在一条路由的处理链上插入中间件,可以使用express对象的use方法

  Ⅰ、内置中间件(express.static())

    可以处理当前目录下的静态文件资源。

1 const express = require("express");
2 const app = express();
3 // 处理静态资源
4 app.use(express.static("./public"));  // use 使用中间件
5 app.listen(3000,()=>{
6     console.log("listen 3000...");
7 })

  Ⅱ、自定义中间件

  index.js文件

  注:Express还提供了一个叫做Router的对象,可以把Router直接传递给app.use,像使用中间件那样使用Router。另外你还可以使用router来处理针对GET、POST等的路由,也可以用它来添加中间件。

 1 const express = require("express");
 2 const url = require("url");
 3 var myrouter =express.Router(); // 建立了一个路由的中间件,处理各种请求
 4 myrouter.get("/one",(req,res)=>{
 5     res.send("one...");
 6 })
 7 myrouter.get("/two",(req,res)=>{
 8     res.send("two...");
 9 })
10 module.exports = myrouter;   // 导出,以便使用

  router.js文件

 1 const express = require("express");
 2 const myrouter = require("./router")  // 引入路由的中间件  引入目录默认引入的index.js文件
 3 var app = express();
 4 // 用staic 中间件处理静态资源
 5 app.use(express.static("./public"));
 6 app.use((req,res,next)=>{   // 拦截所有的请求
 7     console.log(“hello");
 8     next()   //调用下一个中间件,切换到了app.use(myurouter)
 9 })
10 app.use(myrouter);   // 使用路由的中间件
11 app.listen(3000,()=>{
12      console.log("listen 3000....")
13 })

 

以上是关于Node.js之Express路由中间件的主要内容,如果未能解决你的问题,请参考以下文章

Node.js和Express排除路由形式JWT中间件

Node.js_express_中间件 middleware_登录/注册实例

如何在 node.js express 中的路由 end() 之后停止中间件序列继续进行

Node.js 模块之 morgan中间件记录日志

Node.js + Express 接口请求(GETPOSTPUT)事例

Node.js入门教程 第五篇 (Express框架)