EDP内置了一些资源处理函数,可以满足对常见资源的处理。下面列举一些常用的内置资源处理函数。
资源处理函数
file接受一个参数 @param {string} file,如果指定了文件,会渲染指定文件,否则会根据请求的路径输出文件内容。
@param {string} file
pathname
listDirectory
两种情况都会以config中配置的documentRoot作为根目录。
documentRoot
参数:
file
{ location: /^.*$/, handler: file()}
直接输出指定固定内容。
content
{ location: '/hello', handler: content('Hello World!')}
设置指定的response header,新设置的头会覆盖context.header中已有的项。
context.header
header
{ location: /^.*$/, handler: header({'x-copyright': 'your name'})}
输出固定Content-Type头,会覆盖已有的content-type的值。
content-type
contentType
{ location: /^.*$/, handler: contentType('text/plain')}
将数据按JSON格式输出,将自动设置为JSON的Content-Type
data
{ location: '/data', handler: json({ // ... })}
将JSON数据按jsonp的方式输出,将自动设置为JS的Content-Type
JSON.stringify
callbackKey
{ location: '/data', handler: jsonp( { // ... }, 'callbackFunction' )}
打印请求信息,打印的内容包括:
url
method
httpVersion
protocol
host
auth
hostname
port
search
hash
headers
query
body
{ location: /^.*$/, handler: dumpRequest()}
重定向,根据permanent决定返回头是302还是301
location
permanent
{ location: '/', handler: redirect('/404')}
对context.content进行less编译
context.content
compileOptions
encoding
{ location: /\.less($|\?)/, handler: [ file(), less() ]}
对css资源的请求,自动查找相应的同名less文件,并编译输出
{ location: /\.css($|\?)/, handler: [ autoless() ]}
对context.content进行stylus编译
{ location: /\.styl($|\?)/, handler: [ file(), stylus() ]}
对css资源的请求,自动查找相应的同名stylus文件,并编译输出
{ location: /\.css($|\?)/, handler: [ autostylus() ]}
对css资源的请求,自动查找相应的同名stylus或者less文件,并编译输出,autostylus和autoless都是基于autocss实现
{ location: /\.css($|\?)/, handler: [ autocss() ]}
对context.content进行coffee编译
{ location: /\.coffee($|\?)/, handler: [ file(), coffee() ]}
对js资源的请求,自动查找相应的同名coffee文件,并编译输出
{ location: /\.js($|\?)/, handler: [ autocoffee() ]}
处理对php文件的请求,当前只处理url后缀是php的请求,根据当前pathname找到php文件,调用php-cgi,输出执行后的内容
opt_handler
opt_suffix
opt_forwardPathName
{ location: /\.php($|\?)/, handler: [ php() ]}
后端代理当前请求,转发到对应的主机上
{ location: /\.js($|\?)/, handler: proxy('127.0.0.1', '8081')}
如果当前context.status等于404时,代理转发当前请求
context.status
查找config中的proxyMap,如果配置有如下:
exports.proxyMap = { '127.0.0.1:8080': 'www.baidu.com:80'};
则会把127.0.0.1:8080的请求代理到www.baidu.com:80
{ location: /^.*$/, handler: [ file(), proxyNoneExists() ]}
如下示例中的配置会将html2js.js的文件定位到html2js文件,并调用html2js转化为js文件输出
html2js.js
html2js
{ location: /\.js($|\?)/, handler: html2js()}
在html代码的body结束标签前增加下面一个script标签
<script src="http://{options.ip}:{options.port}/livereload.js"></script>
options
options.ip
options.port
options.encoding
输出指定的dir目录或者当前请求的pathname对应的目录下的文件列表
dir
{ location: /\/$/, handler: listDirectory()}
配合Proxy Handler使用,添加一些自定义的Request Header
{ location: /\.js($|\?)/, handler: [ addRequestHeader({ 'host': 'www.baidu.com' }), proxy() ]}
输出当前context的内容,并结束请求
注意:write对一般开发者来说不要去使用,edp webserver会默认在handlers的最后面增加一个write handler,如果开发者调用的write,最后面一个write handler执行的时候会报错
主索引页
查找当前pathname路径下的指定索引文件,如果没找到,则使用listDirectory来作为输出
{ location: '/', handler: home('index.html')}
延迟输出
time
{ location: '/hello', handler: [ content('Hello World!'), delay(500) ]}
输出空内容
{ location: '/empty', handler: empty()}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
发布评论