Node.js學習之路26——Express的response對象

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

response響應頭信息

3.4 設置cookie信息

  • res.cookie(name, value, [options])
  • 清除cookie信息res.clearCookie(name, [options])
  • 設置cookienamevalue,value值能夠是stringobject,options是一個對象
  • domain,string,cookie的域名,默認爲該app的域名
  • expires,date,過時時間
  • httpOnly,boolean,cookie的標誌位,只能容許http web server
  • maxAge,string,用於設置過時時間相對於當前時間 (以毫秒爲單位) 的選項.
  • path,string,cookie的路徑,默認爲/
  • secure,boolean,標記只用於HTTPScookie.
  • 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(links)
res.links({
    next: 'http://localhost:3000/users?page=2',
    next: 'http://localhost: /users?page=5'
})

3.10 響應重定向

  • res.redirect([status], path)
  • 若是不指定status狀態,默認狀態碼status code302 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');
相關文章
相關標籤/搜索