Nodejs Express 4.X 中文API -- Response

res.status(code)
支持連貫調用的nodejs的 res.statusCode = 的別名。

 `res.status(404).sendfile('path/to/404.png');`

res.set(field,[value])
設置請求頭的字段爲指定的值,或者通過一個對象一次設置多個值。

 res.set('Content-Type','text/plain');
 res.set({
    'Content-Type':'text/plain',
    'Content-Length':'123',
    'ETag':'12345'
 });

別名爲:res.header(field,[value]); 。

res.get(field)
獲取不區分大小寫的響應頭 “field”(字段)。

 res.get('Content-Type');
 //=>"text/plain"

res.cookie(name,value,[options])
設置cookie name 的值爲 value,接受參數可以一個字符串或者是對象轉化成的JSON,path 默認設置爲’/’。

 res.cookie('name','tobi',{domain:'.example.com',path:'/admin',secure:true});
 res.cookie('rememberme','1',{expires:new Date(Date.now() + 900000),httpOnly:true});

最大生存期參數[maxAge] 是一個方便的設置項來設置過期時間,值爲相對於當前時間的毫秒時間。下面的代碼就是這樣的一個例子。

 res.cookie('rememberme','1',{maxAge:900000,httpOnly:true});

當一個對象被序列化爲JSON後是可以被設置爲值的,並且它也會自動被bodyParser()中間件解析。

 res.cookie('cart',{items:[1,2,3]});
 res.cookie('cart',{items:[1,2,3]},{maxAge:900000});

被簽名的cookie也同樣被支持通過這種方法設置,簡單的通過signed參數。當被給定的res.cookie()將會使用通過cookieParser(secret)傳遞進來的參數來簽名。

 res.cookie('name','tobi',{signed:true});

之後你就可以通過req.signedCookie對象來訪問這個值。

res.clearCookie(name,[options])
清除名爲 name 的cookie ,默認作用域爲’/’

 res.cookie('name','tobi',{path:'/admin'});
 res.clearCookie('name',{path: '/admin'});

res.redirect([status],url)
重定向至給定的 url 並且支持指定 status 代碼,默認爲 302 方式

 res.redirect('/foo/bar');
 res.redirect('/http://example.com');
 res.redirect(301,'http://example.com');
 res.redirect('../login');

Express支持 一下幾種重定向首先是通過全的符合規則的URL重定向到一個完全不同的域名。

res.redirect('http://google.com');

第二點是相對根域名重定向,例如,如果你想從http://example.com/admin/post/new 跳轉至 /admin 下,你使用下面的代碼,將會是你跳轉到http://ehttp://example.com/admin

res.redirect('/admin');

第三點是相對於掛載點跳轉,例如,如果你的博客程序掛載在’/blog’,而事實上,它是不知道自己被掛載在哪裏的,此時你想重定向至’/admin/post/new’下,你將會被帶到’http://example.com/admin/post/new’ 使用下面的代碼,將會將頁面重定向至’http://example.com/blog/admin/post/new’

 res.redirect('admin/post/new');

當然也是允許頁面路徑相對跳轉的。如果你現在在’http://example.com/admin/post/new’,使用下面的代碼,你可以被帶到’http://example.com/admin/post’

res.redirect('..');

最後還有一種特殊的跳轉,即’back’重定向,它會將您重定向至 Referer (或者是Referrer),當來源不存在時默認定向至 ‘/’下。

 res.redirect('back');

res.location
設置location響應頭

 res.location('/foo/bar');
 res.location('/foo/bar');
 res.location('http://example.com');
 res.location('../login');
 res.location('back');

可以使用與res.redirect()相同的urls

例如,如果你的程序被掛載在/blog 下面的代碼將會將location響應頭賦值爲/blog/admin

 res.location('admin');

res.send([body|status],[body])
發送一個響應。

 res.send(new Buffer('whoop'));
 res.send({sond:'json'});
 res.send('some html');
 res.send(404,'Sorry, we cannot find that!');
 res.send(500,{error:'something blew up'});
 res.send(200);

在簡單的non-streaming響應時,這個方法會自動進行一些有用的任務。例如如果之前沒有定義過Content-Length,他會自動分配,它會自動設置一些HEAD信息,或者HTTP緩存支持。

當傳入的內容爲指定的Buffer,那麼Content-Type會被設置爲”application/octet-stream” 除非你預先執行了下面的定義。

 res.set("Content-Type",'text/html');
 res.send(new Buffer('some html'));

當一個數組或者是對象被傳入Express將會自動轉化爲JSON的形式響應:

res.send({user:'tobi'});
res.send([1,2,3]);

最後,如果給定的參數是一個數字,而且沒有上面提到的任何一個響應體,Express會爲你設置一個默認的響應體。例如200 將會被設置響應體爲 “OK” 和 404 將會被設置爲”Not Found” 等。

 res.send(200)
 res.send(404)
 res.send(500)

res.json([status|body],[body])
發送一個JSON響應。這個方法與res.send()是完全相同的,當一個對象或者數組被傳入的時候。然而它或許是有用的,例如在轉化一些非對象(null,undefined,等等),因爲這些並不是有效的JSON。

 res.json(null)
 res.json({user:'tobi'});
 res.json(500,{error:'message'});

res.jsonp([status|body],[body])
發送一個支持JSONP的JSON響應。這個方法是和res.json()完全相同的,但是它支持JSONP callback

 res.jsonp(null);
 //=>null
 res.jsonp({user:'tobi'});
 //=>{"user": "tobi"}
 res.jsonp(500,{error:'message'})
 //=>{"error":"message"}

默認的JSONP回調函數名字是callback ,然而你可以通過jsonp callback name 設置項來設置,下面的代碼是使用jsonp的一些例子。

 // ?callback=foo
 res.jsonp({user:'tobi'})
 //=>foo({"user":"tobi"})
 app.set('jsonp callback name','cb')
  
 //?cb=foo
 res.jsonp(500,{error:'message'});
 //=>foo({"error":"message"});

res.type(type)
將內容的類型設置爲MIME類型的 type ,可以是簡寫,也可以是存在’/’的字符串。當’/’存在時,類型就確定爲type

 res.type('.html');
 res.type('html');
 res.type('json');
 res.type('application/json');
 res.type('png');

res.format(object)
設置特定請求頭的響應,這個方法是使用req.accepted,這個是一個根據其可接受類型的重要性排序的數組,否則,第一個回調函數將會被調用。當沒有合適的匹配時,系統返回406 “NotAcceptable” 或者調用 default 回調函數。

Content-Type會被設置好在你被選擇的回調函數執行的時候,然而你可以通過res.set()或者res.type()更改這裏的類型。

下面的例子爲在接受請求頭字段被設置爲”application/json”或者”/json”的時候回返回{“message”:”hey”},然而,如果”/*”時將會返回”hey”。

 1 res.format({
 2    'text/plain':function(){
 3         res.send('hey');
 4    },
 5    'text/html':function(){
 6         res.send('hey');
 7    },
 8    'application/json':function(){
 9         res.send({message:"hey"});
10    }
11 });

除了使用一些標準的MIME類型,你也可以是用擴展名映射這些類型,下面是一些詳細的展示。

1 res.format({
 2    text:function(){
 3        res.send('hey');
 4    },
 5    html:function(){
 6        res.send('hey');
 7    },
 8    json:function(){
 9        res.send({message:'hey'});
10    }
11 });

res.attachment([filename])
設置響應頭”Content-Disposition”的值爲”attachment”。如果一個文件被給定,然後Content-Type將會被自動設置爲基於其擴展名的的類型通過res.type(),然後Content-Disposition的”filename=”字段將會自動被設置。

 res.attachment();
 //Content-Disposition :attachment
 res.attachment('path/to/logo.png');
 //Content-Disposition : attachment;filename="logo.png"
 //Content-Type: image/png

res.sendfile(path,[options],[fn])
path用來傳遞文件的路徑。

通過文件的擴展名將會自動設置默認的Content-Type,然後回調函數 fn(err)將會被調用在傳送後或者是產生任何錯誤的時候。

Options:

maxAge 以毫秒爲單位,默認是0
root 相對於文件名的根目錄
這種方法提供了細粒度的文件存儲縮略圖服務

 1 app.get('/user/:uid/photo/:file',function(req,res){
 2     var uid = req.params.uid,
 3         file = req.params.file;
 4     req.user.mayVierFilesFrom(uid,function(yes){
 5         if(yes){
 6             res.sendfile('/uploads/'+uid+'/'+file);
 7         }else{
 8             res.send(403,'Sorry! you cant see that.');
 9         }
10      })
11 })

點擊此處尋求更多的幫助,send

res.download(path,[filename],[fn])
path傳輸所需要傳輸的文件的路徑,通常瀏覽器會提示用戶下載。瀏覽器彈出的下載文件窗口的文件名和響應頭裏的Content-Disposition 的”filename=”參數是一致的。你也可以自己定義文件名。

當發生錯誤或者是一個文件傳送完成將會調用回調函數 fn 。這個方法是用res.sendfile()來發送文件。

1 res.download('/report-12345.pdf');
2 res.download('/report-12345.pdf','report.pdf');
3 res.download('/report-12345.pdf','report.pdf',function(err){
4       if(err){
5            //處理錯誤,可能只有部分內容被傳輸,所以檢查一下res.headerSent
6       }else{
7           //減少下載的積分值之類的。
8       }
9 });

res.link(links)
合併並填充響應頭內的”Link”字段,通過給定的links。

1 res.links({
2      next:'http://api.example.com/users?page=2',
3      last:'http://api.example.com/users?page=5'
4 });

處理後

 Link: <http://api.example.com/users?page=2>; rel="next",
       <http://api.example.com/users?page=5>; rel="last"

res.locals
一次請求的本地化變量,因此只能保持在一次請求/響應的view的輸出之前,其實這個和API的app.locals是一樣的。

這個對象是放置請求級的信息,此時放置請求的路徑名,驗證過的用戶和用戶設置等等。

1 app.use(function(req,res,next){
2     res.locals.user = req.user;
3     res.locals.authenticated = ! req.user.anonymous;
4     next();
5 });

res.render(view,[locals],callback)
渲染一個view,同時向callback傳遞渲染後的字符串,如果在渲染過程中有錯誤發生next(err)將會被自動調用。callback將會被傳入一個可能發生的錯誤以及渲染後的頁面,這樣就不會自動輸出了。

1 res.render('index',function(err,html){
2     //....
3 });
4 res.render('user',{name :'Tobi'},function(err,html){
5     //...
6 })
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章