【node拓展】web开发模式 | express应用程序生成器

简介: 【node拓展】web开发模式 | express应用程序生成器

d5bd87b3b9fa4b1b854b5ce691611c29.gif


🔥前言

前面的文章中的express框架讲解已经进入尾声了,这篇文章是node拓展性文章,目的是在于让大家去了解前端开发的两个开发模式以及express生成器,express生成器真的非常好用,具体见下方讲解咯!


Web开发模式


服务端渲染(SSR)


服务端渲染的概念:服务器发送给客户端的 HTML 页面,是在服务器通过字符串的拼接,动态生成的。因此,客户端不需要使用 Ajax 这样的技术额外请求页面的数据。


特点:

前端嵌套模板,后端渲染页面

前端的任务 ===> 做好静态页面,动态效果。

后端的任务 ===> 前端的代码提交给了后端,后端把静态html以及里面的假数据给删掉,通过模板进行动态生成html的内容。


优点:


  1. 前端耗时少。因为服务器端负责动态生成 HTML 内容,浏览器只需要直接渲染页面即可。尤其是移动端,更省电。
  2. 有利于SEO。因为服务器端响应的是完整的 HTML 页面内容,所以爬虫更容易爬取获得信息,更有利于 SEO。


缺点:


  1. 占用服务器端资源。即服务器端完成 HTML 页面内容的拼接,如果请求较多,会对服务器造成一定的访问压力。
  2. 不利于前后端分离,开发效率低。使用服务器端渲染,则无法进行分工合作,尤其对于前端复杂度高的项目,不利于项目高效开发。


示例代码:


router.get('/index.html',(req,res)=>{
  //要渲染的数据
  const user = {name:'james',age:37}
  //将数据通过字符串拼接,然后动态生成html内容
  const html = `<h1>名字:${user.name},年龄:${user.age}<h1>`
  //把生成的页面内容响应给客户端,这时客户端就拿到了真实数据的html页面
  res.send(html)
  })


模板引擎


在上面的代码中使用拼接字符串的方式去动态生成页面未免很难受,在这里给大家介绍一种模板引擎,模板引擎的目的就是解决用字符串拼接这种麻烦写法的。


ejs模板


EJS是什么? ===> 官网直通车

“E” 代表什么?可以表示 “可嵌入(Embedded)”,也可以是“高效(Effective)”、“优雅(Elegant)”或者是“简单(Easy)”。EJS 是一套简单的模板语言,帮你利用普通的 JavaScript 代码生成 HTML 页面。EJS 没有如何组织内容的教条;也没有再造一套迭代和控制流语法;有的只是普通的 JavaScript 代码而已。


其实ejs就是一个应用级中间件,安装后引用,随后配置一下就可以了!


👉使用npm安装ejs:

npm i ejs

👉标签的含义:


image.png

image.png


Express+EJS实现简单的服务端渲染


主配置页面(index.js):

const express = require("express")
const app = express()
const Router = require("./route/Router")
//配置模板引擎
app.set("views","./views")
app.set("view engine","ejs")
//应用级别
app.use("/index",Router)
app.use((req,res)=>{
    res.status(404).send("丢了")
})
app.listen(3000,()=>{
    console.log("server start")
})


解析:


这里面的两行代码app.set("views","./views")代表的意思是:设置我们的模板代码都在views文件夹里面

app.set("views engine","ejs")代表的意思是:指定我们使用的模板引擎是ejs


路由配置(route/Router.js):



const express = require("express")
const router = express.Router()
//路由级别
router.get("/",(req,res)=>{
    var list = ["james","davis"]
    var myhtml = "<b>我是加粗标签<b>" 
    //渲染模板后返回给前端
    res.render("index",{list:list,myhtml:myhtml}) //寻找views下的index.ejs
})
module.exports=  router


解析:


在服务端渲染中,路由不再为前端提供接口,而是把数据传给ejs模板页面后再把整个页面返回给前端。


在这里res.render()函数的意思是:渲染模板后,然后返回给前端。


第一个参数index的含义是:寻找views下的index.ejs模板

第二个参数的含义是:将路由中的数据传给index.ejs模板


在这里可能有一个小疑问,为什么第一个参数会主动找到views文件夹下的index.ejs,这是因为,我们在index.js文件中配置了app.set("views","./views") app.set("view engine","ejs")


ejs模板页面(views/index.ejs):


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
  <%-include("./headers.ejs")%>
    <h1>我是index页面 </h1>
    <ul>
    <% for(let i =0;i<list.length;i++) { %>
        <li> <%=list[i] %> </li>
    <% } %> 
    </ul>
    <div><%-myhtml %></div>
</body>
</html>


公共头部模板(headers.ejs):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        header {
            color: red;
        }
    </style>
</head>
<body>
    <header>
        <h1>我是公共头部</h1>
    </header>
</body>
</html>


解析:


在上方中的标签含义表格中对各个标签讲解的很详细。<%%>中写的就是我们的js代码,<%= 123%>就是把123渲染到html页面中,<%-

text

%>就是将富文本中的p标签给浏览器所解析


在这里还使用到了<%- include()>,目的是为了引入公共的部分,在这里引入了公共的头部,在我们日常网页中会看到尽管到了不同的路由页面,头部是没有发生变化的,include()中传入公共头部的ejs模板。


页面最终效果:


01.png


前后端分离(BSR)


前后端分离的概念:前后端分离的开发模式,依赖于 Ajax 技术的广泛应用。简而言之,前后端分离的 Web 开发模式,就是后端只负责提供 API 接口,前端使用 Ajax 调用接口的开发模式。


特点:

前端的任务 ===> 做好静态页面,动态效果,ajax获取数据进行渲染

后端的任务 ===> 给前端提供不同功能的接口,便于去调用


优点:


  1. 开发体验好。前端专注于 UI 页面的开发,后端专注于api 的开发,且前端有更多的选择性。
  2. 用户体验好。Ajax 技术的广泛应用,极大的提高了用户的体验,可以轻松实现页面的局部刷新。
  3. 减轻了服务器端的渲染压力。因为页面最终是在每个用户的浏览器中生成的。


缺点:


不利于 SEO。因为完整的 HTML 页面需要在客户端动态拼接完成,所以爬虫对无法爬取页面的有效信息。(解决方案:利用 Vue、React 等前端框架的 SSR (server side render)技术能够很好的解决 SEO 问题!)


如何选择Web开发模式


黑马哥说:不谈业务场景而盲目选择使用何种开发模式都是耍流氓(黑马哥说的真对)


  • 比如企业级网站,主要功能是展示而没有复杂的交互,并且需要良好的 SEO,则这时我们就需要使用服务器端渲染;
  • 而类似后台管理项目,交互性比较强,不需要考虑 SEO,那么就可以使用前后端分离的开发模式。


另外,具体使用何种开发模式并不是绝对的,为了同时兼顾了首页的渲染速度和前后端分离的开发效率,一些网站采用了首屏服务器端渲染 + 其他页面前后端分离的开发模式


Express 应用程序生成器

通过应用生成器工具 express-generator 可以快速创建一个应用的骨架。这个应用程序生成器其实就是一个脚手架,就像vue-cli一样,帮助你快速的搭建一个项目框架!


👉使用npm安装:


npm install -g express-generator


👉创建一个基于ejs模板的应用骨架:


express myPro --view=ejs

02.png


可以看到,骨架已经创建完成.

随后在你创建的目录myPro下安装依赖npm i,这样的话,项目就可以正常启动了!

如果你想实现项目的热更新,可以在文件package.json中配置"start": "node-dev ./bin/www"


03.png


成功界面:


04.png

小结


本篇文章主要是对web开发模式进行简单的分析,主要是做一个SSR与BSR的一个简单区分,不同的项目需求里面可能涉及到不同的开发模式,希望大家不要永远的去认定一个开发模式,虽然现在的项目开发中前后端分离占据主导地位,但是有的时候服务端渲染会更好一点.

express生成器可以帮助大家快速搭建项目骨架,帮助大家解决了项目的前期的引入繁琐操作。



相关文章
|
7月前
|
JavaScript 前端开发
如何减少Node.js应用中的全局变量?
如何减少Node.js应用中的全局变量?
436 133
|
3月前
|
弹性计算 监控 网络安全
如何轻松使用AWS Web应用程序防火墙?
AWS WAF是Web应用防火墙,可防护常见网络攻击。通过创建Web ACL并设置规则,保护CloudFront、API网关、负载均衡器等资源。支持自定义规则与OWASP预定义规则集,结合CloudWatch实现监控日志,提升应用安全性和稳定性。
|
7月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
383 69
|
4月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
217 0
|
3月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
259 3
|
安全 JavaScript 前端开发
AppSpider 7.5.020 发布 - Web 应用程序安全测试
AppSpider 7.5.020 for Windows - Web 应用程序安全测试
101 0
|
3月前
|
存储 安全 Java
如何在 Spring Web 应用程序中使用 @SessionScope 和 @RequestScope
Spring框架中的`@SessionScope`和`@RequestScope`注解用于管理Web应用中的状态。`@SessionScope`绑定HTTP会话生命周期,适用于用户特定数据,如购物车;`@RequestScope`限定于单个请求,适合无状态、线程安全的操作,如日志记录。合理选择作用域能提升应用性能与可维护性。
179 1
|
8月前
|
安全 测试技术 Linux
Acunetix v25.4 发布 - Web 应用程序安全测试
Acunetix v25.4 (Linux, Windows) - Web 应用程序安全测试
254 3
Acunetix v25.4 发布 - Web 应用程序安全测试
|
7月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
204 3
|
7月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
163 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试