3. response對象
3.1 是否發送了響應頭
-
res.headersSent
布爾屬性,app
是否發送了httpheaders
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser')
const app = express();
app.use(bodyParser.json());// parsing application/json
app.use(bodyParser.urlencoded({ extended: true }));// parsing application/x-www-form-urlencoded
app.use(cookieParser())
app.get('/', (req, res) => {
console.log(res.headersSent); // false
res.send('OK');
console.log(res.headersSent); // true
})
app.listen(3000);
3.2 添加響應頭信息
-
res.append(filed,[value])
添加響應頭信息
- 使用
res.append()
以後調用res.set()
將會重置先前設置的頭信息
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log(res.headersSent); // false
res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);
res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');
res.append('Warning', '199 Miscellaneous warning');
res.attachment('path/to/logo.png');
res.cookie('user', { name: 'Jack', age: 18 });
res.cookie('maxAge', 1000 * 60 * 60 * 24 * 30);
res.send('OK');
console.log(res.headersSent); // true
})
app.listen(3000);
3.3 設置HTTP響應Content-Disposition
字段attachment
res.attachment([filename])
- 設置HTTP響應
Content-Disposition
字段attachment
- 若是參數爲空,那麼設置
Content-Disposition:attachment
- 若是參數有值,那麼將基於
res.type()
擴展名設置Content-Type
的值,而且設置Content-Disposition
的值爲參數值
res.attachment();
// Content-Disposition: attachment
res.attachment('path/to/logo.png');
// Content-Disposition: attachment; filename="logo.png"
// Content-Type: image/png
3.4 設置cookie
信息
res.cookie(name, value, [options])
- 清除
cookie
信息res.clearCookie(name, [options])
- 設置
cookie
的name
和value
,value
值能夠是string
或object
,options
是一個對象
-
domain
,string
,cookie
的域名,默認爲該app
的域名
-
expires
,date
,過時時間
-
httpOnly
,boolean
,cookie
的標誌位,只能容許http web server
-
maxAge
,string
,用於設置過時時間相對於當前時間 (以毫秒爲單位) 的選項.
-
path
,string
,cookie
的路徑,默認爲/
-
secure
,boolean
,標記只用於HTTPS
的cookie
.
-
signed
,boolean
,指示是否應對cookie
進行簽名.(有問題,須要cookie-parser
)
全部的
res.cookie ()
都是用所提供的選項設置
HTTP
設置
cookie
頭.任何未指定的選項都默認爲
RFC 6265
中所述的值.
使用
cookie-parser
中間件時, 此方法還支持簽名的
cookie
.只需將簽名的選項設置爲 true.而後,
res cookie ()
將使用傳遞給
cookieParser
(祕密) 的祕密來簽署該值.
3.5 響應下載信息
res.download(path, [filename], [callback(err){...}])
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.download('static/download/file.pdf', 'file.pdf', (err) => {
if (err) {
res.send(err);
}
});
})
app.listen(3000);
3.6 結束響應進程
res.end([data], [encoding])
- 不須要返回任何數據,若是須要返回數據,可使用
res.send()
或者res.json()
3.7 獲取請求頭信息
res.get(field)
- 經過字段返回
HTTP
請求頭信息,大小寫敏感
res.get('Content-Type');
// => "image/png"
3.8 發送一個JSON
響應
res.json([body])
- 方法相似於帶有一個對象參數或數組參數的
res.send()
- 參數也能夠爲
null
或者undefined
res.json(null)
res.json({ user: 'tobi' })
res.status(500).json({ error: 'message' })
3.9 填充響應的連接HTTP標題頭字段
res.links({
next: 'http://localhost:3000/users?page=2',
next: 'http://localhost: /users?page=5'
})
3.10 響應重定向
res.redirect([status], path)
- 若是不指定
status
狀態,默認狀態碼status code
爲302 Found
- 若是要跳轉到外部的連接,須要加上
http://
- 返回上一步的頁面
res.redirect('back');
- 返回上一級的頁面,若是如今是在
http://example.com/admin/post/new
頁面,想要跳轉到上一級頁面http//example.com/admin/post
,使用res.redirect('..');
res.redirect('/users');
res.redirect(301, 'http://localhost:3000/login')
3.11 渲染模板引擎
res.render(view, [locals], [callback(err,html){...}])
- 模板引擎通常有
ejs
,jade
,html
3.12 發送HTTP響應信息
res.send([body])
- 參數能夠是
String
,Buffer
,Array
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('<p>some html</p>');
res.status(404).send('Sorry, we cannot find that!');
res.status(500).send({ error: 'something blew up' });
3.13 給定路徑上傳輸文件
res.sendFile(path, [options], [callback(err){...}])
- 根據文件名的擴展名設置內容類型響應
HTTP
標頭字段.除非在選項對象中設置了根選項, 不然路徑必須是文件的絕對路徑.
-
options
是一個對象選項
-
maxAge
,以毫秒爲單位設置Cache-Control
標題頭的最大屬性或ms
格式的字符串,默認爲0
-
root
,相對文件名的根目錄
-
lastModified
,將Last-Modified
的標題頭設置爲操做系統上文件的最後修改日期.設置爲false
以禁用它.
-
headers
,包含要與文件一塊兒服務的HTTP
標頭的對象.
-
dotfiles
,服務dotfiles
的選項.可能的值是allow
,deny
,ignore
,默認值爲ignore
router.get('/file/:name', (req, res, next) => {
let options ={
root: './public/static/download/',
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
};
let fileName = req.params.name;
res.sendFile(fileName, options, (err) => {
if(err){
console.log(err);
res.status(err.status).end();
}else{
console.log('Sent: ',fileName)
}
})
});
3.14 設置狀態代碼
res.sendStatus(statusCode)
- 將響應
HTTP
狀態代碼設置爲statusCode
, 並將其字符串表示形式做爲響應正文發送.
res.sendStatus(200); // equivalent to res.status(200).send('OK')
res.sendStatus(403); // equivalent to res.status(403).send('Forbidden')
res.sendStatus(404); // equivalent to res.status(404).send('Not Found')
res.sendStatus(500); // equivalent to res.status(500).send('Internal Server Error')
3.15 設置響應頭信息
res.set(field, [value])
- 能夠單個設置,也能夠用一個對象設置
res.set('Content-Type', 'text/plain');
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
3.16 設置響應狀態
res.status(code)
- 使用此方法可設置響應的
HTTP
狀態.它是節點響應的式別名statusCode
res.status(403).end();
res.status(400).send('Bad Request');
res.status(404).sendFile('/absolute/path/to/404.png');
3.17 設置響應類型
res.type(type)
- 將內容類型
HTTP
標頭設置爲指定類型的mime.lookup()
所肯定的mime
類型。若是type
包含/
字符, 則將Content-Type
設置爲type
。
res.type('.html'); // => 'text/html'
res.type('html'); // => 'text/html'
res.type('json'); // => 'application/json'
res.type('application/json'); // => 'application/json'
res.type('png'); // => 'image/png:'
3.18 添加字段到不一樣的響應頭
res.vary(filed)
- 將該字段添加到不一樣的響應標頭 (若是它還沒有存在)。
res.vary('User-Agent').render('docs');