从零学习node.js之express入门(六)

2020-06-17 05:31:47易采站长站整理
res.redirect()重定向请求。res.render()渲染视图模板。res.send()发送各种类型的响应。res.sendFile以八位字节流的形式发送文件。res.sendStatus()设置响应状态代码,并将其以字符串形式作为响应体的一部分发送。

三、中间件

上面我们执行

app.get('/', function(){})
时,里面的回调函数就是中间件。中间件其实就是一个函数,在使用
app.get
,
app.post
,
app.use
等方法时,都是在调用中间件作为回调函数。 中间件都可以调用req和res对象,如果多个中间件顺序向下执行的话,上一个中间还需要一个next变量,来调用下一个中间件。

这里

app.use
的使用方法与
app.get
一样,都是有两个参数:path和回调函数,而在这里,path参数是可以忽略不写的(忽略不写则每个请求都会执行该中间件)。


// 任何的请求,该中间件都会响应
app.use(function(req, res, next){
console.log('index m url: '+req.url);
next(); // 若没有next(),则请求就会被挂起,一直等待
})

// /topic 下的请求都会响应,包括 /topic/1.html, /topic/c/1.html等
app.use('/topic', function(req, res, next){
console.log('topic m url: '+req.url);
next();
})

// 处理/根目录下的请求
app.get('/', function(req, res, next){
res.send('index');
});

// 处理 /topic/1.html 这种类型的请求
app.get('/topic/:id.html', function(req, res, next){
res.send('topic');
});

我们在浏览器中输入一些不同的url看看:

url控制台输出浏览器输出说明
127.0.0.1:3000index m url: /index
/userindex m url: /userCannot GET /user中间件响应了不存在页面的请求
/topic/1.htmlindex m url: /topic/1.html
topic m url: /1.html
topic两个use中间件都响应了请求
/topic/c/1.htmlindex m url: /topic/c/1.html
topic m url: /c/1.html
Cannot GET /topic/c/1.html两个use中间件都响应了请求,只是没有路由来对该url进行处理

同时,

app.use()
app.get()
等方法,可以调用多个中间件依次执行,使用
next()
将控制权交由下一个中间件。多个中间件既可以依次作为传输传递进去,也可以都放到数组中,也可以两者混用(