如何获取Express应用中已注册的所有视图引擎扩展名?
获取Express中所有已注册的视图引擎扩展名
刚好碰到过类似的需求,其实Express在app对象里藏了个很实用的内部属性——app.engines,它能直接帮你拿到所有已注册的视图引擎扩展名,完美解决你遇到的问题。
核心原因
你提到的app.get('view engine')只能获取当前默认的视图引擎扩展名,因为每次调用app.set('view engine', xxx)都会覆盖之前的设置,没法拿到所有通过app.engine()注册的引擎。而app.engines是Express内部维护的对象,专门存储所有你注册过的视图引擎,键就是对应的文件扩展名。
具体实现方法
直接通过Object.keys(app.engines)就能提取出所有已注册的视图引擎扩展名数组:
const express = require('express'); const app = express(); // 注册多个视图引擎(对应你示例中的代码) app.engine('pug', require('pug').__express); app.engine('jade', require('jade').__express); // 设置默认视图引擎(多次设置只会保留最后一个) app.set('view engine', 'pug'); app.set('view engine', 'jade'); // 获取所有已注册的视图引擎扩展名 const registeredEngines = Object.keys(app.engines); console.log(registeredEngines); // 输出: ['pug', 'jade']
额外小技巧
- 如果你需要检查某个特定扩展名是否已注册,可以用:
const hasJadeEngine = app.engines.hasOwnProperty('jade'); console.log(hasJadeEngine); // 输出: true - 这个方法在编写中间件时特别有用,比如你想自动根据视图文件扩展名匹配对应的引擎,或者做全局的视图渲染拦截处理。
内容的提问来源于stack exchange,提问作者Eladian
相关产品推荐
相关产品推荐

