如何获取EJS模板渲染完成后的原始HTML字符串
实现方法
Express 内置的 res.render() 本身就支持获取渲染后的HTML字符串,不需要额外封装工具方法,你可以通过传入第三个回调参数实现:
exports.getintroDetails = async (req, res) => { try { const details = await IntroModel.find(); // 传入第三个回调参数,渲染完成后会自动执行 res.render("final", { details , user:req.user }, (renderErr, htmlString) => { if (renderErr) { console.log(renderErr.message); return res.status(500).send('模板渲染失败'); } // 此处的htmlString就是final.ejs传入数据渲染完成后的完整原始HTML字符串 // 你可以按需操作:存入数据库、写入本地文件、加工后再返回给客户端均可 // 示例:直接将HTML源码返回给客户端展示 return res.send(`<pre>${htmlString.replace(/</g, '<')}</pre>`); }); } catch (error) { console.log(error.message); } };
补充说明
- 常规调用
res.render()不传回调时,Express会自动将渲染结果作为响应返回给客户端;传入回调后则不会自动返回,你可以完全自主处理渲染得到的HTML字符串。 - 如果你需要在非请求上下文的场景下(比如定时任务、公共工具函数里)渲染ejs模板拿HTML字符串,可以直接调用ejs的内置方法:
- 先确保已经安装ejs依赖:
npm i ejs - 示例代码:
const ejs = require('ejs'); const path = require('path'); // 填写你的final.ejs文件的绝对路径,示例仅供参考 const templatePath = path.join(__dirname, '../views/final.ejs'); const htmlString = await ejs.renderFile(templatePath, { details, user: req.user }); - 先确保已经安装ejs依赖:
内容的提问来源于stack exchange,提问作者letsintegreat
相关产品推荐
相关产品推荐

