Express API 测试用例整理(三)
12 Nov 2015Express API 翻译版本点击这里,本文主要对一些方法提供简单的示例,帮助理解使用。
###Response部分
####res.status
支持链式调用,可以修改返回的状态码
var express = require('express');
var app = express();
app.set('views','./public');
app.set('view engine','jade');
app.get('/page',function(req,res,next){
res.status(404).render('page',{title:'Hello jade',message:'This is a node express jade'});
});
app.listen(3000);
####res.set
设置响应头字段,也可以一次传入一个对象设置多个值。
res.set({
'Content-Type' : 'text/html',
'Content-Length' : '124',
'ETag' : '12345',
'testHeader' : 'blue'
});
res.status(200).render('page',{title:'Hello jade',message:'This is a node express jade'});
####res.get
返回一个大小写不敏感的响应头信息的值
res.get('Content-Type'); // "text/html"
####res.cookie
设置cookie信息,接受字符串参数或者JSON对象。
app.get('/page',function(req,res,next){
res.cookie('name','blue',{expires:new Date(Date.now()+90000),httpOnly:true});
res.status(200).render('page',{title:'Hello jade',message:'This is a node express jade'});
});
该函数接受三个参数,分别为要设置的cookie名称,要设置的cookie值和该cookie的配置信息json对象。 该json对象拥有一些常用的属性如下;
- path : 默认为 ‘/’;
- maxAge : 一个便利的设置 expires 的过期时间,它是从当前时间算起的毫秒数
- httpOnly
- domain
- secrue
- expires
- first-Party
####res.clearCookie
把对应cookie清除
res.clearCookie('name',{path:'/'});
####res.redirect
使用可选的状态码跳转到url
,状态码status
默认为302
app.get('/page',function(req,res,next){
res.redirect('http://www.baidu.com'); //直接跳转
res.redirect(200,'www.baidu.com'); //向导跳转
});
express支持几种跳转:
- 使用一个完整的URI跳转到一个完全不同的网站。
res.redirect('http://www.baidu.com')
- 使用相对路径跳转,如果你现在在
http://example.com/admin/post/new
这个页面中,res.redirect('/admin')
将会把你带到http://example.com/admin
- 路径名
.
跳转也同样支持类似 Linux中的cd ..
- 最后也是最特别的
back
跳转,它会把你带回referer的地址,当referer丢失的时候默认为/
。使用res.redirect('back')
####res.location
设置请求头的 location
res.location('/foo/bar/');
####res.charset
设置字符集。默认为 ’utf-8’
####res.send
发送一个响应,这个方法在输出non-streaming响应的时候自动完成了大量有用的任务 比如如果在它前面没有定义Content-Length, 它会自动设置; 比如加一些自动的 HEAD; 比如对HTTP缓存的支持 。
- 当参数为一个 Buffer时 Content-Type 会被设置为 “application/octet-stream” 。
- 当参数为一个String时 Content-Type 默认设置为”text/html”
- 当参数为 Array 或者 Object 时 Express 会返回一个 JSON
- 最后一条当一个Number 作为参数, 并且没有上面提到的任何一条在响应体里, Express会帮你设置一个响应体 比如200 会返回字符”OK”, 404会返回”Not Found”等等.
####res.json
返回一个 JSON 响应。 当res.send() 的参数是一个对象或者数组的时候, 会调用这个方法。 当然它也在复杂的空值(null, undefined, etc)JSON转换的时候很有用, 因为规范上这些对象不是合法的JSON。
app.get('/page',function(req,res,next){
res.json(500,{error:'message'});
});
####res.jsonp
返回一个支持JSONP的JSON响应。这个方法同样使用了 res.json ,只是加了一个可以自定义的JSONP回调支持。默认情况下JSONP回调的函数名就是 callback 。你可以通过设置 jsonp callback name 来修改这个值。
// ?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.format
设置特定请求头的响应。下面的例子展示了在请求头设置为 application/json
或者 */json
的时候会返回 {"message":"hey"}
,如果设置的是 */*
那么所以返回的都是 hey
res.format({
'text/plain': function(){
res.send('hey');
},
'text/html': function(){
res.send('hey');
},
'application/json': function(){
res.send({ message: 'hey' });
}
});
除了使用标准的MIME 类型,你也可以使用扩展名来映射这些类型 下面是一个不太完整的实现:
res.format({
text: function(){
res.send('hey');
},
html: function(){
res.send('hey');
},
json: function(){
res.send({ message: 'hey' });
}
});
####res.sendfile
可接收3个参数,path, [options], [fn], path为所传输附件的路径。它会根据文件的扩展名自动设置响应头里的Content-Type字段。fn 回调函数在传输完成或发生错误时会被调用。 options :
- maxAge 毫秒,默认为 0
- root 文件相对路径
这个方法可以非常友好的支持有缩略图的文件服务。
####res.download
接受3个参数,path, [filename],[fn] path所需传输附件的路径,通常情况下浏览器会弹出一个下载文件的窗口。 浏览器弹出框里的文件名和响应头里的Disposition “filename=” 参数是一致的, 你也可以通过传入filename来自由设置。 当在传输的过程中发生一个错误时,可选的回调函数fn会被调用执行。 这个方法使用res.sendfile()传输文件。
res.download('/report-12345.pdf');
res.download('/report-12345.pdf', 'report.pdf');
res.download('/report-12345.pdf', 'report.pdf', function(err){
if (err) {
// 处理错误,请牢记可能只有部分内容被传输,所以
// 检查一下res.headerSent
} else {
// 减少下载的积分值之类的
}
});
####res.links
合并给定的links, 并且设置给响应头里的”Link” 字段。
res.links({
next: 'http://api.example.com/users?page=2',
last: 'http://api.example.com/users?page=5'
});
转换后
Link: <http://api.example.com/users?page=2>; rel="next",
<http://api.example.com/users?page=5>; rel="last"
####res.locals
在某一次请求范围下的响应体的本地变量,只对此次请求期间的views可见。 另外这个API其实和 app.locals是一样的。(应该只在该回调域内)
这个对象在放置请求级信息时非常有用,比如放置请求的路径名,验证过的用户,用户设置等等
app.use(function(req, res, next){
res.locals.user = req.user;
res.locals.authenticated = ! req.user.anonymous;
next();
});
####res.render
渲染view, 同时向callback 传入渲染后的字符串。 callback如果不传的话,直接会把渲染后的字符串输出至请求方, 一般如果不需要再对渲染后的模板作操作,就不需要传callback。 当有错误发生时next(err)会被执行. 如果提供了callback参数,可能发生的错误和渲染的字符串都会被当作参数传入, 并且没有默认响应。
var express = require('express');
var app = express();
app.set('views','./public');
app.set('view engine','jade');
app.get('/page',function(req,res,next){;
res.render('page',{title:'Hello jade',message:'This is a node express jade'});
});
app.listen(3000);