【Node】Express模块set、engine、all、use等常用接口解析
在Express用作node后端框架时,一般我们通过如下方式,在app.js中引入express模块
var app = express();
引入完毕后,可以用app提供的各个接口引入各个中间件、路由配置、模板引擎等,在app上配置的参数都属于全局配置。接下来对常用的API做出介绍
一、app.all和app.use
1、app.use
- app.use可以为全局引入模块,比如app.use(cors())引入CORS模块允许跨域访问,app.use(cookieParser())引入cookie-parser模块后可以在请求响应中使用模块提供的便利的cookie处理、配置接口
- app.use为路径配置中间件或者处理程序,格式如app.use(path,[middleware/routerProcesser])。在app.js中,需要通过全局配置路径处理程序,来为接到的网络请求分配处理程序,处理程序一般使用express.router()模块,在routes文件夹下做出详细定义。
- app.use的执行顺序为书写顺序
2、app.all
app.all属于路由处理器接口,它顾名思义,all是路由中指代所有的请求方式,如all('/a'),能同时覆盖:get('/a') 、post('/a')、 put('/a') 等。
常用的场景:
路径的任意方式,配置统一的响应头:
app.all('/*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", 'http://localhost:3000'); // 设置允许访问的域名
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, withCredentials "); // 设置请求头格式和类型
res.header("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS"); // 允许支持的请求方式
res.header("Access-Control-Allow-Credentials", true); // 允许后端发送cookie
next();
});
3、两者的区别
- 功能定位不同:app.use偏中间件处理,app.all偏路径配置
- 路径匹配方式不同:app.use实际匹配的路径(可接受的路径)是 use中定义的path+middleware中配置的路径;而app.all中对路径的接受采用严格匹配的方式,如果要多匹配,则需要设置通配符* 以下为例子:
二、app.set
app.set()函数用于将设置名称分配给value。您可以存储所需的任何值,但可以使用某些名称来配置服务器的行为。
app.set(name, value)
常用场景:设置模板文件夹以及其模板引擎
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
上面两行是设置views文件夹,即模板文件夹,__dirname是node.js里面的全局变量,即取得执行的js所在的路径,另外__dirname是目前执行的js文件名。所以,app.set(‘views’, __dirname + ‘/views’);是设置views的文件夹。
而app.set(‘view engine’, ‘jade’);是设置express.js所使用的render engine。除了Jade之外express.js还支持EJS(embedded javascript)、Haml、CoffeScript和jQuerytemplate等js模板
三、app.engine
app.engine()函数用于将给定的模板引擎回调注册为ext。默认情况下,Express本身将基于文件扩展名require()引擎。
app.engine(ext, callback)
参数:ext参数指的是文件扩展类型,例如.html等,而callback是作为参数传递的引擎模块,常见的模板引擎有ejs、hbs等