You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.ejs文件缓存失效:根路径服务器无响应如何修复?

问题解决:Node-Cache缓存EJS文件后根路径无响应

问题场景

使用node-cache实现EJS文件缓存时,服务器对根路径/无响应,当前代码如下:

app.get('/', (req, res) => {
    if(myCache.has('/')){
        console.log('Getting it from cache....')
        return res.send(myCache.get('/'))
    }else{
        let htmlStr = '';
        res.renderFile('index', {title: 'ReSt ApI'}, (err, html) => {
            if(err){
                console.log('Error');
            }
            else{
                htmlStr = html;
                myCache.set('/', htmlStr)
                res.send(htmlStr);
            }
        })
    }
})

对比可正常工作的纯HTML文件路由:

app.get('/', (req, res) => {
    if(myCache.has('/')){
        console.log('Getting it from cache')
        return res.sendFile(myCache.get('/'))
    } else{
        myCache.set('/', path.resolve(__dirname, 'client', 'index.html'))
        res.sendFile(path.resolve(__dirname, 'client', 'index.html'))
    }
})

问题原因及修复方案

核心问题

  1. 错误未处理响应:当res.renderFile执行出错时,仅打印错误但未向客户端返回任何响应,导致请求一直处于挂起状态,服务器无响应。
  2. EJS文件路径不明确:若未配置EJS视图目录,直接写'index'可能找不到文件,需指定完整路径。

修改后的代码

const path = require('path');

app.get('/', (req, res) => {
    if(myCache.has('/')){
        console.log('Getting it from cache....')
        return res.send(myCache.get('/'))
    }else{
        // 指定EJS文件的完整路径,避免找不到文件
        const ejsFilePath = path.resolve(__dirname, 'views', 'index.ejs');
        res.renderFile(ejsFilePath, {title: 'ReSt ApI'}, (err, html) => {
            if(err){
                console.error('渲染EJS出错:', err);
                // 出错时返回500错误及提示,确保响应结束
                return res.status(500).send('页面渲染失败');
            }
            myCache.set('/', html);
            res.send(html);
        })
    }
})

关键修改点

  • 添加错误响应:出错时调用res.status(500).send()返回错误信息,确保请求被正常处理并结束。
  • 指定完整EJS路径:使用path.resolve拼接完整的EJS文件路径,避免因视图目录未配置导致的文件找不到问题。
  • 移除冗余变量:直接使用回调中的html变量,无需额外定义htmlStr。

内容的提问来源于stack exchange,提问作者user25025825

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:04:59