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_中间件 middleware_登录/注册实例
如何在 node.js express 中的路由 end() 之后停止中间件序列继续进行