我创建了一个网页以在本地使用它,以保存有关随机主题和大学课程的信息。我有很多路线,如下所示:
//app.js - using node and express
app.get('/page1', function(req, res){
res.render('page1');
});
app.get('/page2', function(req, res){
res.sendFile('views/page2.html', { root: __dirname });
});
这些路由中的每一个都有一个.ejs
文件或一个.html
文件,它们都很小。
我认为我没有犯任何重大错误,但是我有一种感觉,我没有使用“最佳实践”,或者至少可以做一些不同的事情。
.ejs
,并且大多数页面具有相同的header.ejs
和footer.ejs
。每次我更改具有相同页眉/页脚的页面时,是否会再次加载它们,或者由于它们使用的是相同的页眉/页脚文件,服务器仅请求两者之间的内容?
const express = require('express');
和const app = express();
而不是var express = require('express');
和var app = express();
```或此
app.get('/page1', (req, res) => {
res.render('page1');
});
```
而不是上面的第一段代码。
谢谢! :D
答案 0 :(得分:2)
使用很多这样的路线有什么问题吗?应该更改一些内容以优化页面的呈现吗?
从技术上讲,这没有什么错。许多普通的res.sendFile()
路由可能可以用单个express.static()
中间件语句代替,以简化代码。
很多res.render()
路由都没有将任何自定义数据传递给EJS,也可能由一个中间件代替,该中间件处理模板文件的整个目录(及其对应的路由)或文件列表。与单独阐明每条路线相比,DRY会多得多。
正如我之前所说,我在大多数页面上都使用.ejs,其中大多数具有相同的header.ejs和footer.ejs。每次更改具有相同页眉/页脚的页面时,是否会再次加载它们,或者由于它们使用相同的页眉/页脚文件,因此服务器仅请求两者之间的内容?
EJS在内存中缓存模板(除非您禁用缓存),这样就不会从磁盘一遍又一遍地加载页眉和页脚模板。
使用res.render和res.send有什么区别?
这些已在文档中全面介绍。简而言之,res.render()
支持您的模板引擎和本地数据馈入模板引擎,以允许其将数据添加到模板。 res.send()
只是发送您提供的原始内容。
我应该使用其他语法:const express = require('express'); &const app = express();而不是var express = require('express'); &var app = express();
每当您声明的变量应获得其初始值且不再分配时,使用const
被认为是一种好习惯。除了某些编码安全性外,这有时还可以使解释器在使用变量时进行更多优化(因为无法更改其值)。