express应用

287 阅读3分钟

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

我觉得这个东西很蛋疼,我甚至觉得我的理解是错的,但是网上相关的教程我觉得都没能把我说明白了。 留到下节再把我的想法说一下。