位置: IT常识 - 正文

【node拓展】web开发模式 | express应用程序生成器(nodejs c扩展)

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

推荐整理分享【node拓展】web开发模式 | express应用程序生成器(nodejs c扩展),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node web,nodejs c扩展,node.nodetype,node.js来一打c++扩展,node.nodetype,node.js来一打c++扩展,node c++扩展,node c++扩展,内容如对您有帮助,希望把文章链接给更多的朋友!

✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强!☀️ 💯 刷题网站:这段时间有许多的小伙伴在问有没有什么好的刷题网站,博主在这里给大家推荐一款刷题网站:👉点击访问牛客网👈牛客网支持多种编程语言的学习,各大互联网大厂面试真题,从基础到拔高,快来体验一下吧!

🔥前言

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

📃目录Web开发模式服务端渲染(SSR)模板引擎ejs模板Express+EJS实现简单的服务端渲染前后端分离(BSR)如何选择Web开发模式Express 应用程序生成器小结Web开发模式服务端渲染(SSR)

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

特点: 前端嵌套模板,后端渲染页面 前端的任务 ===> 做好静态页面,动态效果。 后端的任务 ===> 前端的代码提交给了后端,后端把静态html以及里面的假数据给删掉,通过模板进行动态生成html的内容。

优点:

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

缺点:

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

示例代码:

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

👉标签的含义:

标签解释<%‘脚本’ 标签,用于流程控制,无输出。<%_删除其前面的空格符<%=输出数据到模板(输出是转义 HTML 标签)<%-输出非转义的数据到模板<%#注释标签,不执行、不输出内容<%%输出字符串 ‘<%’%>一般结束标签-%>删除紧随其后的换行符_%>将结束标签后面的空格符删除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

【node拓展】web开发模式 | express应用程序生成器(nodejs c扩展)

路由配置(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页面中,<%-<p>text<p>%>就是将富文本中的p标签给浏览器所解析

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

页面最终效果:

前后端分离(BSR)

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

特点: 前端的任务 ===> 做好静态页面,动态效果,ajax获取数据进行渲染 后端的任务 ===> 给前端提供不同功能的接口,便于去调用

优点:

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

缺点: 不利于 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

可以看到,骨架已经创建完成. 随后在你创建的目录myPro下安装依赖npm i,这样的话,项目就可以正常启动了! 如果你想实现项目的热更新,可以在文件package.json中配置"start": "node-dev ./bin/www" 成功界面:

小结

本篇文章主要是对web开发模式进行简单的分析,主要是做一个SSR与BSR的一个简单区分,不同的项目需求里面可能涉及到不同的开发模式,希望大家不要永远的去认定一个开发模式,虽然现在的项目开发中前后端分离占据主导地位,但是有的时候服务端渲染会更好一点. express生成器可以帮助大家快速搭建项目骨架,帮助大家解决了项目的前期的引入繁琐操作。

👑书写不易,希望大家能够给予三连支持,期待我更好的文章哟👑

本文链接地址:https://www.jiuchutong.com/zhishi/300142.html 转载请保留说明!

上一篇:Docker容器部署及基本使用(docker 容器)

下一篇:深度卷积神经网络(AlexNet)(深度卷积神经网络基本结构)

  • 中国电信pin码初始密码是多少(电信 初始pin码)

    中国电信pin码初始密码是多少(电信 初始pin码)

  • win10用户账户控制怎么取消(win10用户账户控制 管理员已阻止你运行此应用)

    win10用户账户控制怎么取消(win10用户账户控制 管理员已阻止你运行此应用)

  • 视频补帧可以提高的画质吗(视频补帧提高软件安卓)

    视频补帧可以提高的画质吗(视频补帧提高软件安卓)

  • 前置摄像头无法弹出(前置摄像头无法打开是什么原因)

    前置摄像头无法弹出(前置摄像头无法打开是什么原因)

  • 三星s9电池不耐用(三星s9+手机电池不耐用了怎么修复)

    三星s9电池不耐用(三星s9+手机电池不耐用了怎么修复)

  • 5gwifi4g手机能用吗(5gwifi4g手机可以用吗)

    5gwifi4g手机能用吗(5gwifi4g手机可以用吗)

  • b站关注怎么设置不可见(B站关注怎么设置自动回复)

    b站关注怎么设置不可见(B站关注怎么设置自动回复)

  • 抖音作品加个井号是什么意思(抖音作品加个井号好还是不好)

    抖音作品加个井号是什么意思(抖音作品加个井号好还是不好)

  • 电脑左半边键盘失灵(电脑左半边键盘数字不显示)

    电脑左半边键盘失灵(电脑左半边键盘数字不显示)

  • 华为mate30pro录音功能在哪里(华为mate30pro录音文件删除还能找回吗)

    华为mate30pro录音功能在哪里(华为mate30pro录音文件删除还能找回吗)

  • 小米air和air2区别(小米air 2跟air 2s有什么区别)

    小米air和air2区别(小米air 2跟air 2s有什么区别)

  • iphone 11 pro max有紫色吗(苹果11pro max怎么连接蓝牙)

    iphone 11 pro max有紫色吗(苹果11pro max怎么连接蓝牙)

  • cdr保存快捷键(cdr2020怎么保存)

    cdr保存快捷键(cdr2020怎么保存)

  • 华为系统10.0怎么升级(华为10版本系统怎样)

    华为系统10.0怎么升级(华为10版本系统怎样)

  • 荣耀手机加密文件在哪里(荣耀文件夹加密码)

    荣耀手机加密文件在哪里(荣耀文件夹加密码)

  • 一加7T怎么打开nfc(一加7t怎么打开地震预警)

    一加7T怎么打开nfc(一加7t怎么打开地震预警)

  • 荣耀Magic Watch 2有没有扬声器(荣耀magicwatch2能下载软件吗)

    荣耀Magic Watch 2有没有扬声器(荣耀magicwatch2能下载软件吗)

  • 二面角的定义(二面角的定义及求解)

    二面角的定义(二面角的定义及求解)

  • 华为p30能拍月亮吗(华为p30por拍月亮)

    华为p30能拍月亮吗(华为p30por拍月亮)

  • oppoa5私密保险箱怎么看(oppoa5私密保险箱密码忘了咋办)

    oppoa5私密保险箱怎么看(oppoa5私密保险箱密码忘了咋办)

  • oppok3导航键设置(oppo k3的导航键在哪里设置)

    oppok3导航键设置(oppo k3的导航键在哪里设置)

  • 荣耀20防抖吗(荣耀20pro防抖)

    荣耀20防抖吗(荣耀20pro防抖)

  • 在Win7系统中,如何删除系统还原点?(在win7系统中,添加打印机驱动程序)

    在Win7系统中,如何删除系统还原点?(在win7系统中,添加打印机驱动程序)

  • 【蓝牙系列】蓝牙5.4到底更新了什么(2)(蓝牙11)

    【蓝牙系列】蓝牙5.4到底更新了什么(2)(蓝牙11)

  • 推荐 4个有趣实用的 ChatGPT 开源应用(推荐 4个有趣实践作业)

    推荐 4个有趣实用的 ChatGPT 开源应用(推荐 4个有趣实践作业)

  • 非货币资产交换和债务重组的区别
  • 出口退税是先交税后退税吗
  • 发票验旧以后还有用吗
  • 对公账户汇款方式
  • 个人如何开现金账户
  • 销售货物分期付款怎么确认收入
  • 小规模企业发票跨月可以作废吗?
  • 固定资产盘盈怎么算
  • 业务宣传费超出部分以后年度怎样处理
  • 企业自用房要交契税吗
  • 增值税进项大于销项,要全部认证吗
  • 咨询服务费怎么结转成本
  • 含税价与不含税价哪个便宜
  • 没有把发票开给客户公司注销了怎么办
  • 社保基数每个月可以调整一次吗
  • 上月开的销项专票如何做废?
  • 个体户没有对公账户可以转个人账户吗
  • 固定资产残值率计算公式
  • windows10自带桌面时钟
  • 如何让电脑安全
  • git pull远程
  • 转出未交增值税借方余额表示什么
  • window10黑白模式
  • 深度优先python
  • 下脚料属于什么科目
  • zend framework手册
  • php yield 异步
  • 应收账款净额可以是负数吗
  • php比较大小
  • 无形资产的会计处理
  • php框架运行机制
  • vue引入svg图片
  • centos 安装php
  • 什么叫web渗透测试
  • 下载下来是php
  • 运输费怎么做会计分录
  • 计提增值税依据
  • 出口退税方法相关文献
  • okhttp3源码
  • 资产负债表日后事项是什么意思?
  • 增量留抵税额怎么算
  • 没有参加会计继续教育会怎样
  • 本年利润必须转入利润分配吗
  • 出口单证不全如何申报退税
  • 买个人的二手车能贷款吗
  • 完工产品成本计算表怎么填
  • 固定资产抵债交不交增值税
  • 一般纳税人的资格登记
  • 法院强制执行扣完款就完事了吗
  • 冲销预付账款怎么填记账凭证
  • 金蝶财务软件服务器
  • 纳税申报准备什么材料
  • 会计账簿的装订绳子
  • mysql新手入门
  • mysql数据库全量备份
  • winxp 共享设置
  • mac系统播放器声音小
  • 计算机的硬盘
  • win10 mobile 1709
  • linux服务器常用操作命令
  • linux在实际工作中的应用
  • mysql如何添加外键
  • win10系统怎么刻录光盘?win10刻录光盘详细图文步骤
  • CCMoveBy与CCMoveTo
  • unity3d ngui-TweenRotation翻牌动画
  • android 程序开发
  • 安卓游戏引擎
  • python mypy
  • jquery插件使用教程
  • 了不起的女孩
  • 在批改中,可以使用x表示错误
  • unity dem
  • jquery移动端ui框架
  • node优秀库
  • jq获取节点属性
  • bootstraptable方法
  • jquery获取url地址
  • 贸易型企业进项发票
  • 如何下载建设工程消防验收备案表格下载
  • 宣城国税局电话是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设