在前几篇我们了解了 Express 的安装、路由和中间件。在介绍的过程中我们使用了一些方法,那些方法只是整个 Express 框架API 中的一部分,那么我们现在具体总结一下 Express 中的API。
express模块
-
创建express 实例
在我们引入 express 模块之后,我们可以通过express()
创建 express 实例,如下所示:var express = require('express'); var app = express();
-
三个内置中间件
在中间件的使用我们介绍过三个内置中间件,分别是express.json([选项])
、express.static(root,[选项])
和express.urlencoded([选项])
。 -
创建路由器对象
在路由中我们了解过,可以通过express.Router
创建一个新的路由器对象。var express = require('express'); var router = express.Router([options])
在创建过程中我们可以传入三个选项,具体的选项和作用:
- caseSensitive:是否区分大小写,默认是不区分。例如:“ / Foo”和“ / foo”视为相同。
- mergeParams:保留req.params来自父路由器的值。如果父项和子项的参数名称冲突,则子项的值优先。
- strict:是否启动严格路由,默认不启动。例如:路由器将“ / foo”和“ / foo /”视为相同。
express实例
express实例的属性
app.locals
:这个属性就是实例的局部变量的属性。一旦设置,app.locals
属性值将在应用程序的整个生命周期中保持不变
app.locals.title = "这是一个属性";
app.locals.num= 11;
我们可以在项目的任何地方通过app.locals
设置和访问局部变量,也可以通过req.app.locals
使用局部变量。
app.mountpath
:这个属性包含一个或多个安装了子应用程序的路径模式。具体使用方法如下所示:
//根实例
const app = express()
//子实例
const admin = express()
admin.get('/', function (req, res) {
console.log(admin.mountpath)
//在安装成功之后,当此时路径为 /adm*n或者/manager时都输出 [ '/adm*n', '/manager' ]
//可以通过/adm*n和/manager这两个路径访问到admin实例,则 mountpath 属性存放的就是可以访问到实例的路径
res.send('Admin Homepage')
})
//子实例,准备安装到 admin 子实例上
const secret = express()
secret.get('/', function (req, res) {
console.log(secret.mountpath)
//在安装成功之后,当此时路径为 /adm*n/secr*t或者/manager/secr*t时都输出 /secr*t
res.send('Admin Secret')
})
admin.use('/secr*t', secret)
app.use(['/adm*n', '/manager'], admin)
express实例的事件
express实例中的事件只有一个,用于子应用程序挂载到父应用程序上时执行。语法:app.on('mount' , callback(parent))
,其中callback(parent)
是一个回调函数,回调函数的参数是父应用程序。具体实例如下所示:
const app = express()
const admin = express()
admin.on('mount', function (parent) {
console.log('Admin Mounted')
console.log(parent) // refers to the parent app
})
admin.get('/', function (req, res) {
res.send('Admin Homepage')
})
app.use('/admin', admin)
当应用程序开始运行时,则事件自定执行。
express实例的方法
express实例中的方法大致可以分为两类,一类是用于设置属性,一类是用于路由或挂载中间件。
app.all、app.delete、app.get、app.post、app.put、app.route、app.use
这些方法都是用于路由或挂载中间件,我们在路由篇我具体讲解。app.listen([port[, host[, backlog]]][, callback])
:用于绑定并侦听指定主机和端口上的连接。如果端口被省略或为0,操作系统将分配一个任意未使用的端口,这对于自动任务(测试等)之类的情况很有用。app.disable(name)
:将name指定的设置项设置为false。app.disable(‘foo’)相当于app.set(‘foo’, false)app.disabled(name)
:如果name指定的设置项为false,则返回true。app.enable(name)
:将name指定的设置项设置为true。app.enable(‘foo’)相当于app.set(‘foo’, true)app.enabled(name)
:如果name指定的设置项为true,则返回true。app.engine(ext, callback)
:用于给不同后缀的文件指定不同的模板引擎app.get(name)
:返回name表示设置项的值。还有另外一种用法,就是用于路由中。app.param([name], callback)
:用于为路径的参数添加回调。如下实例,当访问 user/fasd 的时候,会先执行app.param
中的回调,然后再去执行get
中的回调,并且在一个请求-响应循环中只会被调用一次,即使有多个路由的param匹配了它。:
app.param('aa', function(req, res, next, aa) {
console.log('CALLED ONLY ONCE');
next();
})
app.get('/user/:aa', function(req, res) {
console.log('and this matches too');
res.end();
});
app.path()
:返回app的地址,string格式。
const app = express()
const blog = express()
const blogAdmin = express()
app.use('/blog', blog)
blog.use('/admin', blogAdmin)
console.log(app.path()) // ''
console.log(blog.path()) // '/blog'
console.log(blogAdmin.path()) // '/blog/admin'
app.render(view, [locals], callback)
:在回调中返回渲染完成的html界面。它支持传入模板对应的参数,它类似于res.render(),只是不能向客户端直接返回渲染后的界面。app.set(name, value)
:为name设置value,其中name为app设置表中的某个属性。
属性名 | 类型 | 描述 | 默认值 |
---|---|---|---|
case sensitive routing | Boolean | 是否大小写敏感 | 默认为false,即视”/Foo”与”/foo”为同一个path |
env | String | 环境模式 | 默认为process.env.NODE_ENV,或者“development” |
etag | Varied | 设置ETag响应的头信息。可用的值请看etag选项表部分 | |
jsonp callback name | String | 指定默认的jsonp回调名称 | 默认为”?callback=” |
json replacer | String | json replacer回调 | 默认为null |
json spaces | Number | 设置后会用指定数量的空格填充json | 默认为Disabled |
query parser | String | 指定查询解析器,可用的有“simple”或“extended”。simple表示使用node的查询解析器:querystring;extended表示使用qs | 默认为”extended” |
strict routing | Boolean | 是否使用严格路由 | 默认为false,路由器会将”/foo”与”/foo/”视为同一个路径 |
subdomain offset | Number | The number of dot-separated parts of the host to remove to access subdomain | 2 |
trust proxy | Varied | 是否启用代理判断 | Disabled. |
views | String or Array | 表示应用的view文件存放的地址。如果是一个数组,那么将按照数组顺序寻找view文件 | process.cwd() + ‘/views’ |
view cache | Boolean | 是否启用view模板缓存 | 生产环境默认为true |
view engine | String | 指定view渲染引擎 | |
x-powered-by | Boolean | 在HTTP头中加入”X-Powered-By: Express” | true |
trust proxy可选设置项:
类型 | 值 |
---|---|
Boolean | 如果为true,那么express会从X-Forwarded-*头的最左边寻找客户端的IP地址。如果为false,那么express会从req.connection.remoteAddress获取客户端的IP地址。默认为false |
IP addresses | 指定信任的ip地址或子网地址或ip地址数组。默认的子网名称有:loopback - 127.0.0.1/8, ::1/128linklocal - 169.254.0.0/16, fe80::/10 uniquelocal - 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7 |
Number | 信任前n个代理服务器 |
Function | 定制化信任机制 |
etag可选设置项:
类型 | 值 |
---|---|
Boolean | true表示启用弱ETag,false表示不启用ETag。默认为true |
String | “strong”表示启用强ETag,“weak”表示启用弱ETag |
Function | 定制化ETag方法 |