app对象通常表示Express应用程序。
var express = require('express');
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
app.listen(3000);
app对象有方法
- 路由HTTP请求;app.METHOD和app.param
- 配置中间件;app.route
- 呈现HTML视图;app.render
- 注册模板引擎;app.engine
首先我们先讨论app的属性:
1. app.locals
应用程序中的局部变量
```
app.locals.title
// => 'My App'
app.locals.email
// => 'me@myapp.com
```
局部变量在中间件中可用req.app.locals
2. app.mountpath
app.mountpath属性为该应用程序被挂载的路径。
举个例:
```
var express = require('express');
var app = express(); // app
var admin = express(); // 子app
admin.get('/', function (req, res) {
console.log(admin.mountpath); // /admin
res.send('Admin Homepage');
});
app.use('/admin', admin); //挂载子app
// 还可以被安排到多个路径
var admin = express();
admin.get('/', function (req, res) {
console.log(admin.mountpath); // [ '/admin', '/manager' ]
res.send('Admin Homepage');
});
var secret = express();
secret.get('/', function (req, res) {
console.log(secret.mountpath); // /secr*t
res.send('Admin Secret');
});
admin.use('/secr*t', secret); // 挂载
app.use(['/admin', '/manager'], admin);// 挂载
```
相关的事件:
app.on('mount', callback(parent))
在app被挂载的时候,会触发mount监听器,将父级作为参数传递给回调函数
var 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);
接下来就是重点,app的方法
-
app.all(path, callback , callback ...)
此方法包括了所有的http请求 -
app.delete(path, callback , callback ...)
匹配delete方法
| 参数 | 描述 | 默认 |
|---|---|---|
| path | 中间件功能被调用的路径; 可以是以下任何一种:表示路径的字符串。路径模式。一个正则表达式模式来匹配路径。上述任何组合的数组。有关示例,请参阅路径示例。 | '/' (root path) |
| callback | 回调函数; 一系列中间件功能(用逗号分隔)。您可以提供多个回调函数,每一个函数都像中间件一样(或者就是中间件),回调中可以调用next('route')来绕过剩余的回调。您可以使用这个机制在某些回调上施加条件判断,并在没有理由继续往下执行时绕过剩余回调函数。由于路由器和应用程序实现了中间件接口,因此您可以像使用其他中间件功能一样使用它们 | None |
app.all()方法对于为特定路径前缀或任意匹配映射“全局”逻辑非常有用。例如,如果将以下内容放在所有其他路由定义的顶部,则要求所有来自该点的路由都要求进行身份验证(中间件1),并自动加载用户信息(中间件2)。loadUser可以执行任务后调用next()继续匹配后续路由。
app.all('*', requireAuthentication, loadUser);
// 相当于
app.all('*', requireAuthentication);
app.all('*', loadUser);
//deldete意思意思
app.delete('/', function (req, res) {
res.send('DELETE request to homepage');
});
-
app.disable(name)
将布尔值设置name为false,其中name是《应用程序设置表》中的其中一个属性。
调用app.set('foo', false)作为布尔属性与调用app.disable('foo')相同。
-
app.disabled(name)
如果布尔设置name被禁用(false),返回true。其中name是《应用程序设置表》中的一个属性。
-
app.enable(name)
将布尔值设置name为true,其中name是应用程序设置表中的其中一个属性。
调用app.set('foo', true)布尔属性与调用app.enable('foo')相同。
-
app.enabled(name)
如果name启用了设置(true),返回true,其中name是应用程序设置表中的其中一个属性。
app.disable('trust proxy');
app.get('trust proxy');
// => false
app.disabled('trust proxy');
// => true
app.enable('trust proxy');
app.disabled('trust proxy');
// => false
app.get('trust proxy');
// => true
app.enabled('trust proxy');
// => true
蛮无聊的,这个逻辑甚至懒得记,很符合生活。按照正常逻辑判断就好了。
-
app.engine
我觉得这个东西很蛋疼,我甚至觉得我的理解是错的,但是网上相关的教程我觉得都没能把我说明白了。 留到下节再把我的想法说一下。