一 、多个路由映射相同的请求路径
如果路由中,有多个路由映射相同的请求路径,那路由会怎么执行?
可以为一个地址同时绑定多个路由,多个路由将会按照绑定的顺序依次执行,
但是注意:前一个路由有权决定后一个路由是否执行
在路由的回调函数中,处理req 和 res 还有一个第三个参数 next
next是一个回调函数,如果在路由中调用next,则请求会自动跳转到下一个路由,若不调用不执行下一个路由
每一次请求,都会创建一个新的request 和 response对象
一个地址同时绑定多个路由,在一次请求中,这多个路由中的request和response都是同一个对象
例子如下:
//引入express
var express = require("express");
//创建应用对象
var app = express();
//配置静态资源
app.use(express.static("public"));
app.get("/hello/abc" , function (req , res , next) {
console.log("Hello 我是路由1");
//console.log(next);
res.send("路由1返回的内容");
next();//只有调用next()方法,下一个路由才会执行
});
app.get("/hello/abc" , function (req , res , next) {
console.log("Hello 我是路由2");
res.send("路由2返回的内容");
next();
});
app.get("/hello/abc" , function (req , res) {
console.log("Hello 我是路由3");
});
//监听端口并启动服务器
app.listen(3000 , function () {
console.log("ok");
});
绑定多个路由还有另一种方法,在一个路由中写多个回调函数:
//引入express
var express = require("express");
//创建应用对象
var app = express();
//配置静态资源
app.use(express.static("public"));
app.get("/hello" , function (req , res , next) {
console.log("路由1");
res.send("路由1");
next();
}, function (req , res , next) {
console.log("路由2");
next();
}, function (req , res , next) {
console.log("路由3");
});
//监听端口并启动服务器
app.listen(3000 , function () {
console.log("ok");
});
二、模块化路由
如果用应用对象app.get();这种方式绑定路由,不是很好,如果有很多个路由,对于项目很难管理,那如何绑定,接下来聊一下;
我们可以新建一个模块helloRouter.js,然后调用express.Router()方法,express.Router()会返回一个router对象,该对象可以用来绑定路由。
例子如下:
var express = require("express");
var router = express.Router();
router.get("/hello",function (req , res) {
res.send("我是hello路由");
});
router.get("/abc",function (req , res) {
res.send("我是abc路由");
});
//暴露路由
module.exports = router;
然后在主文件中引入路由,将router设置为应用的中间件,路由就生效了。
//引入express
var express = require("express");
//创建应用对象
var app = express();
//配置静态资源
app.use(express.static("public"));
//引入hello路由
var helloRouter = require("./router/helloRouter");
//需要将router设置为应用的中间件
//可以再为路由加一个根路径/nihao,不加也可以
app.use("/nihao",helloRouter);
//监听端口并启动服务器
app.listen(3000 , function () {
console.log("ok");
});