0

0

Express与EJS:视图渲染常见问题与解决方案

花韻仙語

花韻仙語

发布时间:2025-10-12 13:01:00

|

902人浏览过

|

来源于php中文网

原创

Express与EJS:视图渲染常见问题与解决方案

本文旨在解决express应用中ejs模板文件无法正确渲染为html的常见问题,特别是当出现“cannot get /store.html”错误时。核心解决方案在于确保客户端请求的url与服务器端定义的路由路径精确匹配,并理解express配置ejs作为视图引擎后,`res.render()`方法处理模板文件的机制,避免直接以`.html`扩展名访问ejs文件。

理解Express与EJS视图渲染机制

在Express应用中,EJS(Embedded JavaScript)是一种流行的模板引擎,用于将数据动态地渲染到HTML结构中。为了使Express能够识别并渲染EJS文件,需要进行特定的配置。

首先,通过app.set('views', path.join(__dirname, 'views'))指定EJS模板文件所在的目录。 其次,通过app.set('view engine', 'ejs')告知Express使用EJS作为默认的视图引擎。 完成这些设置后,当调用res.render('templateName', data)时,Express会自动在views目录下查找名为templateName.ejs的文件,并使用提供的数据进行渲染。

常见问题:“Cannot GET /store.html”错误解析

当尝试访问一个EJS模板文件却收到“Cannot GET /store.html”这样的错误时,通常是由以下两个主要原因造成的:

  1. 路由定义与请求URL不匹配: 服务器端定义的路由路径与客户端实际请求的URL不一致。
  2. EJS文件访问方式不正确: 错误地尝试以.html扩展名直接访问EJS模板文件。

让我们结合一个具体的代码示例来深入分析:

if (process.env.NODE_ENV !== 'production') {
    require('dotenv').config()
}

const stripeSecretKey = process.env.STRIPE_SECRET_KEY
const stripePublicKey = process.env.STRIPE_PUBLIC_KEY

const express = require('express')
const path = require('path')
const app = express()
const fs = require('fs')
const stripe = require('stripe')(stripeSecretKey)

// 配置视图目录和视图引擎
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')
app.use(express.json())
// 静态文件服务,通常用于CSS, JS, 图片等
app.use(express.static('public'))

// 定义一个GET路由来渲染EJS模板
app.get('/store', (req, res) => {
    fs.readFile('items.json', (error, data) => {
        if (error) {
            res.status(500).end()
        } else {
            // 渲染 store.ejs 模板
            res.render('store.ejs', { // 或者更简洁地写成 res.render('store', { ... })
                items: JSON.parse(data)
            })
        }
    })
})

app.listen(3000, () => {
    console.log('Server running on port 3000')
})

在上述代码中,我们定义了一个路由: app.get('/store', ...)

这意味着当客户端通过HTTP GET请求访问/store这个路径时,服务器会执行相应的回调函数,并尝试渲染store.ejs模板。然而,如果客户端尝试访问http://localhost:3000/store.html,就会触发“Cannot GET /store.html”错误。

解决方案

解决此问题主要有以下两步:

1. 修正客户端请求URL

最直接的解决方案是确保客户端请求的URL与服务器端定义的路由路径完全匹配。

错误示例: http://localhost:3000/store.html正确示例: http://localhost:3000/store

挖错网
挖错网

一款支持文本、图片、视频纠错和AIGC检测的内容审核校对平台。

下载

当您在浏览器中输入或在前端代码中发起请求时,应该使用与app.get()中定义的路径一致的URL。

2. 理解EJS模板渲染机制

一旦app.set('view engine', 'ejs')被设置,res.render()方法将自动处理EJS文件的查找和渲染。

  • 当您调用res.render('store', { ... })时,Express会根据view engine的设置,自动查找并渲染views/store.ejs文件。
  • 即使您明确写成res.render('store.ejs', { ... }),其效果也是相同的,但通常推荐使用不带扩展名的形式,因为它更简洁,并且在切换视图引擎时更易于维护。

重要提示: express.static('public')中间件是用于提供静态文件的(如CSS、JavaScript、图片等),它不会处理EJS模板。尝试通过静态文件服务直接访问EJS文件(例如public/store.ejs)也是行不通的,EJS文件必须通过res.render()方法进行渲染。

总结与注意事项

为了确保EJS模板能够正确渲染,请遵循以下几点:

  1. 检查EJS包是否已安装: 确保您的项目中已安装ejs包。如果没有,请运行npm install ejs。
  2. 正确配置视图引擎: 在Express应用中,务必设置app.set('views', ...)和app.set('view engine', 'ejs')。
  3. 路由与URL匹配: 确保客户端请求的URL路径与服务器端app.get()、app.post()等方法中定义的路由路径完全一致。不要在URL中添加.ejs或.html扩展名来访问通过res.render()渲染的模板。
  4. 使用res.render()渲染模板: 始终通过res.render('templateName', data)来渲染EJS模板,而不是试图将其作为静态文件直接访问。
  5. 文件路径确认: 确保store.ejs文件确实存在于app.set('views', ...)所指定的目录下。

通过理解并遵循这些原则,您将能够有效地在Express应用中利用EJS模板引擎进行视图渲染,避免常见的“Cannot GET”错误。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

178

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

215

2025.12.18

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

421

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

418

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2300

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2086

2024.08.16

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

15

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

12

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

CSS教程
CSS教程

共754课时 | 24.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号