方法
描述
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中的方法,则后面的中间件不再调用。
总结