首页 > 其他分享 >前端歌谣-第六十五课-express之服务端渲染和客户端渲染

前端歌谣-第六十五课-express之服务端渲染和客户端渲染

时间:2024-01-23 19:32:49浏览次数:28  
标签:req console log 渲染 res app express 第六十五

前言

我是歌谣 微信公众号关注前端小歌谣一起学习前端知识 今天继续给大家讲解服务端渲染和客户端渲染静态资源的讲解

案列

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>我是主页</title>
</head>
<body>
    <div>
        我是主页
    </div>
    <div class="list">

    </div>
    <script>
        fetch("/home").then(res=>res.json()).then(res=>{
            console.log(res)
            render(res)
        })
        function render(data){
            var list=data.map(item=>`<li>${item}</li>`)
            console.log(list)
            var oul=document.querySelector(".list")
            oul.innerHTML=list.join("")
        }
    </script>
</body>
</html>

indexrouter.js

const express = require("express")
const router = express.Router()

router.get("/login",(req,res)=>{
    
    res.send("get-success")
})
router.get("/home",(req,res)=>{
    
    res.send(["111","222","33333"])
})
router.post("/login",(req,res)=>{
    console.log(req.body)
    const {username,password}=req.body
    if(username=="geyao"&&password=="123456"){
        res.send({ok:"1"})
    }else{
        res.send({ok:"0"})
    }
   
})
module.exports=router

index01.js

const express = require("express")
const app = express()
const IndexRouter=require("./router/indexRouter")
//配置解析
app.use(express.static("public"))
app.use(express.urlencoded({extended:false}))
app.use(express.json())
//应用
app.use(function(req,res,next){
    console.log("验证token")
    next()
})

app.use(function(req,res,next){
    console.log("验证token")
    next()
})

app.use("/",IndexRouter)

app.use((req,res)=>{
    res.status(404).send("丢了")
})

app.listen(3000, () => {
    console.log("server start")
})

login.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>我是登录</title>
</head>

<body>
    <div>用户名:<input id="username" />
    </div>
    <div>密码:<input type="password" id="password" />
    </div>
    <div>
        <button id="login">登录</button>
    </div>
    <div>
        <button id="loginpost">登录-post</button>
    </div>
</body>
<script>
    var oLogin=document.querySelector("#login")
    var oLoginPost=document.querySelector("#loginpost")
    var oUsername=document.querySelector("#username")
    var oPassword=document.querySelector("#password")
    oLogin.onclick=()=>{
        console.log(oUsername.value,oPassword.value)
        fetch(`/login?username=${oUsername.value}&password=${oPassword.value}`)
        .then(res=>res.text()).then(res=>{
            console.log(res)

        })
    }
    oLoginPost.onclick=()=>{
        console.log(oUsername.value,oPassword.value)
        fetch(`/login`,{
            method:"POST",
            body:JSON.stringify({
                username:oUsername.value,
                password:oPassword.value
            }),
            headers:{
                "Content-Type":"application/json"
            }
        }).then(res=>res.json()).then(res=>{
            console.log(res,"res")
            if(res["ok"]=="1"){
                location.href="/index.html"
            }else{
                console.log("用户名密码不匹配")
            }
        })
    }
</script>
</html>

运行结果

前端歌谣-第六十五课-express之服务端渲染和客户端渲染_html

前端歌谣-第六十五课-express之服务端渲染和客户端渲染_用户名_02

案例优化

login.ejs

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div>登录</div>
    <h1><%=geyao%></h1>
</body>
</html>

indexRoute.js

const express = require("express")
const router = express.Router()

router.get("/login",(req,res)=>{
    res.render("login",{geyao:"geyao"})
    // res.send("get-success")
})
router.get("/home",(req,res)=>{
    
     res.send(["111","222","33333"])
})
router.post("/login",(req,res)=>{
    console.log(req.body)
    const {username,password}=req.body
    if(username=="geyao"&&password=="123456"){
        res.send({ok:"1"})
    }else{
        res.send({ok:"0"})
    }
   
})
module.exports=router

index01.js

const express = require("express")
const app = express()
const IndexRouter=require("./router/indexRouter")
//配置模板
app.set("views","./views")
app.set("view engine","ejs")
//配置解析
app.use(express.static("public"))
app.use(express.urlencoded({extended:false}))
app.use(express.json())
//应用
app.use(function(req,res,next){
    console.log("验证token")
    next()
})

app.use(function(req,res,next){
    console.log("验证token")
    next()
})

app.use("/",IndexRouter)

app.use((req,res)=>{
    res.status(404).send("丢了")
})

app.listen(3000, () => {
    console.log("server start")
})

运行结果

前端歌谣-第六十五课-express之服务端渲染和客户端渲染_用户名_03

标签:req,console,log,渲染,res,app,express,第六十五
From: https://blog.51cto.com/geyaoisnice/9382420

相关文章

  • 「云渲染C4D」C4D如何进行云渲染?
    云渲染C4D的过程可现实一键式完成,目前云渲染平台随着技术的发展,平台的使用越发容易操作,无论是渲染文件的传输性、安全性、高效性都有较大的提升,本次为大家简单说明下关于云渲染操作方法。(图源网络)C4D云渲染流程第一步:准备渲染文件通过本地电脑上完成个人建模,确保C4D项目文件......
  • DevExpress WinForms导航控件 - 交付更时尚、体验更好的业务应用(二)
    DevExpressWinForms的SideNavigation(侧边导航)和NavPanel(导航面板)可以帮助客户交付完全可模仿UI体验的业务解决方案,这些体验在当今流行的应用程序中都可找到。在上文中(点击这里回顾>>),我们为大家介绍了DevExpressWinForms导航控件中的折叠组件、导航栏组件等。接下来我们将继续......
  • 获取前台分类数据,数据类型和渲染
    1.封装获取前来分类数据API接口文档 把这个接口写入程序 接下来主页调用 验证是否获取数据成功 ......
  • 获取轮播图数据,数据类型定义并渲染
    1.封装获取轮播图数据API2.页面初始化调用API下面根据接口文档写代码1.定义轮播图数据类型2.指定类型并传值给子组件3.渲染轮播图数据根据接口文档类型声明:存放路径:`src/types/home.d.ts````ts/**首页-广告区域数据类型*/exporttypeBannerItem={/**跳转链接*/......
  • 性价比之选:寻找成本最低的云渲染服务平台
    ​在数字创作的天空中,选择一个既经济又高效的云渲染服务平台像是在寻找一片成本最低、性能最优的金矿,本篇将指引您如何慧眼识别,从众多云渲染解决方案中挑选出最符合预算且不牺牲渲染质量的服务。在数字艺术、游戏开发、影视制作,乃至建筑可视化等众多行业,高质量的三维渲染已成为......
  • Flutter框架渲染流程与使用
    转自:https://www.cnblogs.com/zhou--fei/p/17068412.html Flutter简述Flutter是一个UI框架,可以进行移动端(iOS,Android),Web端,桌面端开发,它是一个跨平台解决方案。Flutter的特点:美观,快速,高效,开放。美观:Flutter内置了美丽的MaterialDesign和Cupertinowidget,方便开发出美......
  • 界面控件DevExpress ASP.NET Data Grid组件 - 可快速处理各类型数据!(一)
    由DevExpress开发的快速且功能完整的ASP.NETWebForms的DataGrid组件,从全面的数据塑造和数据过滤选项到十多个集成数据编辑器,该套件提供了帮助用户构建极佳数据所需的一些,没有限制!P.S:DevExpressASP.NETWebForms Controls拥有针对Web表单(包括报表)的110+种UI控件,可利用轻量级......
  • HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染
    HarmonyOS4.0系列——06、渲染之条件渲染、循环渲染以及懒加载渲染if/else:条件渲染ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和elseif渲染对应状态下的UI内容。写法和TS的一样,简单看一下即可@Entry@ComponentstructIfForEach{@State......
  • Evaluation Of postfix Expression using stack【1月21日学习笔记】
    点击查看代码//EvaluationOfpostfixExpressionusingstack#include<iostream>#include<stack>//stackfromstandardtemplatelibrary(STL)#include<string>usingnamespacestd;intEvaluatePostfix(stringexp);boolIsOperator(charc);intPe......
  • 基于物理的渲染(3):OSG中PBR实践
    1.1单光源直接光照voidmain(){ //创建小球几何 osg::ref_ptr<osg::ShapeDrawable>sphere=newosg::ShapeDrawable; sphere->setShape(newosg::Sphere(osg::Vec3(0,0,0),radius)); sphere->setColor(osg::Vec4(col)); //创建小球节点 osg::ref_ptr<osg::Geode>pbr......