app是通过调用express()函数生成的
属性
app.locals
app.locals是一个对象,在这个对象上定义的属性是一个全局变量,在整个应用中都好用,与这个形成对比的是res.locals,这个对象只在请求的生命周期中存在
注意:不能在中间件中访问全局变量
方法
app.all(path, callback[, callback])
处理所有的请求路径,一般有俩种用法,第一种就是app(’*‘,callback),第二种用法是app.all("/api/*",callback);
app.delete(path, callback)
删除特定的请求路径
app.engine(ext, callback)
登记模板引擎,这块express都给你写好了,一般不用你写,一般你创建express应用时会提醒你选择什么模板引擎
app.get(path, callback)
处理http get请求,然后是回调函数
app.listen(port, [hostname], [callback])
这个方法与nodejs中的http.server.lisen()是相同的,这个方法我看官方教程上写的还比较麻烦,这里就不必深入的讲解,一般你创建express应用时,自动监听到3000端口,你也可以自己更改
app.param([name], callback)
这个name参数就是,就是你路径中请求的参数,可以是一个单独的字符串,也可以是一个数组,callback函数的参数是请求对象,响应对象,下一个中间件参数就是next,还有就是传递参数的值
如果name是一个数组那么就是,callback中的next参数,指向name中下一个请求的参数,name中最后一个参数,也就是数组最后的一项的next指向的是下一个中间件,而不是name中的下一个请求参数

如果是http get /user/42,通过上面的路由处理会显示如下结果

在通过一个例子来熟悉app.param()的用法

通过http get user/42/3,通过以上路由处理,显示如下

还有一种形式的app.param(),他接受俩个参数一个name一个数字,用法如下

app.path()
返回一个app的路由地址,例如app.get('/user', callback),如果运用该方法返回的是/user字符串
app.post(path, callback)
处理一个http post 请求
app.put(path, callback)
处理一个http put请求
app.render(view, [locals], callback)
和res.render()方法类似,通过这个全局变量渲染这个view
app.router(path)
就是只有特定的路由等于path(不管是http 的get, post, put请求)能够通过router函数,这个函数返回一个路由的实例,然后通过这个实例然后进一步处理路由,在这个实例上可以调用all(),get(), post()方法。如下

app.use([path], function[,function])
就是在path上安装上中间件,默认的path是“/”,app.use("/apple"...)匹配/apple和/apple/new和/apple/new/old还有很多,如下

如果没有path,那么每一个请求都会执行function,就是所有请求都会被function处理,如下

注意以下情况

第二个路由处理得不到执行,因为第一个中间件不会让请求出来的
path路径可以是字符串可以是正则表达式,还可以是数组
字符串

模式匹配

正则表达式

数组

定义中间件可以用app也可以是router,因为app和router都实现了中间件接口,中间件函数可以是一个也可以是一系列,还可以是数组,或者是组合
单个中间件函数

一系列中间件函数

数组

中间件函数的组合

网友评论