4.5 响应对象
每个路由函数都会接收一个响应对象,通过调用响应对象的方法,可以将响应发送到客户端,并结束请求处理。如果路由函数未调用响应对象的任何方法,则客户端请求将被挂起,直到客户端超时。
下面的内容介绍了响应对象常用的操作。
1.resp.status()
设置响应状态码。
resp.status(statusCode);
· statusCode响应状态码
以下是响应403状态码的示例:
app.get('/', (req, resp) => { resp.status(403).end(); });
2.resp.set()
设置响应报头。要一次设置多个响应报头字段,需要传递对象作为参数。
resp.set(field[, value])
或
resp.set({ [field]: value });
· field:响应报头字段名称。
· value:响应报头字段值。
以下是设置响应类型为纯文本的示例:
app.get('/', (req, resp) => { resp.set('Content-Type', 'text/plain'); resp.send('Hello World'); });
3.resp.download()
通过Content-Disposition响应报头提示客户端下载文件。
resp.download(path[, filename][, options][, callback])
· path:需要提供给客户端下载的服务端文件路径。
· filename:客户端下载文件时的别名。
· options:下载选项。
· callback:回调函数。
以下是一个下载PDF的示例:
4.resp.end()
结束响应过程。
resp.end([chunk][, encoding][, callback])
· chunk:响应数据。
· encoding:响应体编码。
· callback:回调函数。
以下是一个输出Hello World并结束请求的示例:
app.get('/', (req, resp) => { resp.end('Hello World'); });
5.resp.redirect()
重定向到指定的URL Path或者完整的URL链接。默认情况下响应状态码为302。
resp.redirect([status,] path)
· status:响应状态码,301或者302。
· path:重定向路径。
以下是重定向到登录页面的示例:
app.get('/user/home', (req, resp) => { resp.redirect('/user/login'); });
以下是使用301(永久重定向)状态码将文章重定向的示例:
app.get('/news/2019/10/01.html', (req, resp) => { resp.redirect(301, '/news/2019/10-01.html'); });
以下是重定向到外部网域的示例:
app.get('/', (req, resp) => { resp.redirect('https://www.ddhigh.com'); });
6.resp.render()
渲染HTML模板页面。
渲染模板页面需要使用到模板引擎,关于模板的详细内容将在后续内容介绍。
resp.render(view[,locals][,callback])
· view:视图名称。
· locals:传递到视图的变量对象,视图可以访问到这些变量并进行渲染。
· callback:回调函数。如果提供,该方法将返回可能的错误和HTML字符串,但不是自动发送HTML到客户端。
以下是渲染用户主页的示例:
app.get('/user/home', (req, resp) => { resp.render('user/home', { name: 'xialei' }); });
7.resp.cookie()
设置Cookie。
resp.cookie(name, value[, options])
· name:Cookie名称。
· value:Cookie值。
· options选项:
domain:域名。默认为当前域名。
expires GMT:到期时间。如果未设置或者设置为0,则浏览器关闭后Cookie失效。
httpOnly:将Cookie标记为只有HTTP服务器能访问(客户端JS无法访问)。
maxAge:以毫秒为单位的过期时间。通常比expires选项使用方便。
path:Cookie路径。
secure:标记为仅在HTTPS协议下才发送。
signed:是否对Cookie签名。
以下是设置用户登录态cookie的示例:
调用cookie并不会终止请求处理流程,需要调用其他方法来终止请求处理,否则客户端请求会挂起直到超时。
8.resp.send()
发送HTTP响应。该方法可以根据传入的内容来输出不同格式的响应内容。
resp.send([body])
· body响应内容。支持string、Buffer、Object、Array。
String:Content-Type将自动设置为text/html。
Buffer:Content-Type将自动设置为application/octet-stream。
Object或Array:Content-Type将自动设置为application/json。
以下是响应JSON的示例:
app.get('/', (req, resp) => { resp.send({name: 'xialei'}); });
以下是响应文本的示例:
app.get('/', (req, resp) => { resp.send('Hello World'); });