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

方法 描述
res.download()   下载文件。  
res.end()   终结响应处理流程。  
res.json()   发送一个 JSON 格式的响应。  
res.jsonp()   发送一个支持 JSONP 的 JSON 格式的响应。  
res.redirect()   重定向请求。  
res.render()   渲染视图模板。    
res.send()   发送各种类型的响应。  
res.sendFile   以八位字节流的形式发送文件。  
res.sendStatus()   设置响应状态代码,并将其以字符串形式作为响应体的一部分发送。  

三、中间件

上面我们执行app.get('https://www.jb51.net/', 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('https://www.jb51.net/', 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:3000   index m url: /   index    
/user   index m url: /user   Cannot GET /user   中间件响应了不存在页面的请求  
/topic/1.html   index m url: /topic/1.html
topic m url: /1.html
  topic   两个use中间件都响应了请求  
/topic/c/1.html   index 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()将控制权交由下一个中间件。多个中间件既可以依次作为传输传递进去,也可以都放到数组中,也可以两者混用(app.get等同理):

app.use(path, m1, m2, m3, m4...); app.use(path, [m1, m2, m3, ...]); app.use(path, [m1, m2, m3, ...], m7, m8, ...);

在上面代码的基础上,我们编写多个中间件。

// 作为数组方式 app.use([ function(req, res, next){ console.log('index m 1'); next(); }, function(req, res, next){ console.log('index m 2'); next(); }, function(req, res, next){ console.log('index m 3'); next(); } ]) // 每个中间件作为一个参数 app.get('/topic/:id.html', function(req, res, next){ // res.send('topic'); console.log('topic get 1'); next(); }, function(req, res, next){ console.log('topic get 2'); next(); }, function(req, res, next){ console.log('topic get 3'); res.send('topic'); });

当我们访问127.0.0.1/topic/1.html时,在控制台则会输出:

index m 1 index m 2 index m 3 topic get 1 topic get 2 topic get 3

说明中间件是依次向下执行的。我们可以在每个中间件都做不同的处理,不过要记得使用next()方法,不然页面就挂了。
我们在上面看到res中的方法,至少需要调用一个,不然请求就会被挂起,一直等待或404。如果对外没有任何的回复,也可以使用res.end()结束。同时,如果在某个中间件中使用了res中的方法,则后面的中间件不再调用。

总结

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwzjfx.html