Express/Node需要一个视图引擎吗?

9

我已经深入学习了Node/Express(同时学习了JavaScript中级内容),但是我有点困惑,为什么需要像Jade或EJS这样的“视图引擎”呢?

我似乎找不到使用普通HTML5的东西,或者说我无法通过express将值传递给普通HTML页面吗?

假设我有一个名为index.html的页面,它会在加载时显示并在“登录”时以用户名称显示在顶部(仅用于示例)。我不能在express中将值传递给正常的html文件吗?

2个回答

11

Express/Node是否需要视图引擎?

不需要,Express可以愉快地按照您的意愿提供静态HTML5文件。您无需使用视图引擎。您可以创建自定义路由并为每个页面使用res.sendFile(),或者您可以使用express.static()自动服务整个静态HTML文件目录,或者编写自己的代码来构建想要发送的任何HTML5内容,并使用res.send()发送它。

视图引擎所需的地方是您想要一种模板类型的系统,可以在其中创建一个具有动态内容占位符的HTML模板,然后在服务器上插入动态值到页面中。

我不能在Express中传递值到普通的.html文件中吗?

不行,您无法使用常规的Express实现此功能。Express提供了服务静态HTML文件的功能,但没有将动态内容插入HTML文件中的能力。这就是使用视图引擎的原因。Express没有内置此功能,因为有许多不同的视图引擎哲学,而Express不想强制执行一种风格,所以它支持一个视图引擎接口用于从模板呈现,您可以选择要使用哪个视图引擎。


我尝试在我的视图文件夹目录中的index.html文件上使用res.send,但它说找不到该文件。我是否应该将其作为另一个静态文件(与我的css /等一起)包含进去? - msmith1114
@msmith1114 - 你需要展示你所使用的代码,这样我们才能知道你做错了什么。res.send()应该用于内存字符串。res.sendFile()应该用于从磁盘中读取文件。如果找不到文件,则可能是路径错误。你应该使用视图引擎来使用res.render() - jfriend00
我之前使用的是 res.render(),这就是问题所在!我猜大多数 Node 开发者都使用视图引擎? - msmith1114
@msmith1114 - 如果您正在提供具有动态内容的HTML网站,则使用视图引擎可以使您的工作更加轻松。如果您只提供静态内容或仅提供API,则可能不需要视图引擎。或者一些网站在前端使用JavaScript插入动态内容。 - jfriend00

3
回答主要问题 - 在express/node中,视图引擎不是必需的。
但你说得对,你无法将变量/值传递给纯html。视图引擎是一种检查您传递的数据并为您生成html标记的工具。
使用视图引擎的另一种方法是使用像jquery、react或angular这样的前端库/框架(或者您可以使用普通的javascript)。Javascript可以使用ajax/fetch获取数据,并将其绑定到您的html上 - 如果您使用的是普通的javascript或jquery,则可能无法进行绑定,但您可以使用数据更新DOM。

那么如果没有视图引擎,我该如何将值加载到网页中(例如从数据库中)? - msmith1114
1
你可以使用Ajax向服务器发送HTTP请求,从数据库检索数据,并将其作为JSON发送回前端JavaScript请求。以下是一个例子:https://dev59.com/m2ox5IYBdhLWcg3wGwlo - abdul ahmad
我猜大多数用户都会使用视图引擎吧? - msmith1114

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接