python爬取cctalk视频_iKcamp|基于Koa2搭建Node.js实战(含视频)☞ 处理静态资源

本文介绍了如何使用Koa2处理静态资源,包括引入`koa-static`中间件,设置静态资源目录,以及创建公共视图如header、footer和layout。同时展示了如何为首页、登录和成功页面设计布局,提供更美观的用户界面。通过这个实战教程,读者将了解Koa2应用的基础结构和静态资源管理。
部署运行你感兴趣的模型镜像

处理静态资源

无非花开花落,静静。

指定静态资源目录

这里我们使用第三方中间件: koa-static

安装并使用

安装 koa-static:

npm i koa-static -S

修改 app.js,增加并指定 /public 目录为静态资源目录。

const Koa = require('koa')

const path = require('path')

const bodyParser = require('koa-bodyparser')

const nunjucks = require('koa-nunjucks-2')

// 引入 koa-static

const staticFiles = require('koa-static')

const app = new Koa()

const router = require('./router')

// 指定 public目录为静态资源目录,用来存放 js css images 等

app.use(staticFiles(path.resolve(__dirname, "./public")))

app.use(nunjucks({

ext: 'html',

path: path.join(__dirname, 'views'),

nunjucksConfig: {

trimBlocks: true

}

}));

app.use(bodyParser())

router(app)

app.listen(3000, () => {

console.log('server is running at http://localhost:3000')

})

之后我们对项目的视图进行美化,使之更为赏心悦目。

增加样式文件

在 /public/home/ 目录下新增样式文件 main.css,内容如下:

*{

padding: 0;

margin: 0;

}

body,html{

font-size: 14px;

color: #000;

background: #fff;

font-family: Helvetica Neue,Helvetica,Segoe UI,Arial,Hiragino Sans GB,Microsoft YaHei;

-webkit-font-smoothing: antialiased;

position: relative;

}

.fn-clear:after {

visibility: hidden;

display: block;

font-size: 0;

content: " ";

clear: both;

height: 0

}

.fn-clear {

zoom:1}

a {

color: #0366d6;

text-decoration: none;

}

a:hover {

text-decoration: none;

}

.header{

width: 100%;

background-color: #474747;

}

.header-box{

height: 30px;

line-height: 30px;

font-size: 12px;

letter-spacing: 2px;

color: #d5d5d5;

transition: color .3s;

}

.header-box>.logo{

letter-spacing: 0;

font-size: 12px;

}

.wraper{

width: 1200px;

margin: 0 auto;

}

.container{

min-height: 500px;

padding: 80px 0;

}

.footer{

background: #262a30;

padding: 50px 0;

border-top: 1px solid #ddd;

color: #999;

font-size: 16px;

}

.footer-box{

width: 800px;

margin: 0 auto;

text-align: center;

}

.banner_box{

width: 100%;

min-width: 1200px;

height: 438px;

background: url(https://res.hjfile.cn/cc/cctalk.hujiang.com/home/images/banner-2QEtv.jpg?2QEtv) 50% no-repeat;

background-size: cover;

}

.banner_box>.banner_inner{

width: 1200px;

margin: 0 auto;

padding-top: 112px;

}

.banner_inner>.slogan{

width: 427px;

height: 54px;

background: url(https://res.hjfile.cn/cc/cctalk.hujiang.com/home/images/slogan@2x-3x9xM.png?3x9xM);

background-size: 100% auto;

margin: 0 auto 25px;

text-indent: -99999rem;

}

.banner_inner>.des{

margin-bottom: 24px;

font-size: 16px;

line-height: 1.9;

color: #fff;

text-align: center;

}

.banner_inner>.btn{

display: block;

margin: 0 auto;

width: 220px;

height: 48px;

font-size: 20px;

line-height: 48px;

border-radius: 4px;

background-color: #15a9ff;

color: #fff;

text-align: center;

text-decoration: none;

box-shadow: 0 2px 6px rgba(0,0,0,.3);

}

.show_time>.feature-con{

background: #fff;

border-bottom: 2px solid #f8f8f8;

min-width: 1200px;

}

.feature-con>.feature{

list-style: none;

margin: 0 auto;

padding: 40px 0 60px;

width: 1200px;

}

.feature>.feature-item{

float: left;

width: 160px;

margin: 0;

padding: 0;

margin-right: 132px;

}

.feature>.feature-item:first-child{

margin-left: 88px;

}

.feature>.feature-item:last-child{

margin-right: 0;

}

.feature .ico{

display: inline-block;

width: 160px;

height: 130px;

background: url(https://res.hjfile.cn/cc/cctalk.hujiang.com/home/images/feature-icon1@2x-BvNad.png?BvNad);

background-size: 100% auto;

}

.feature>.feature-item:nth-child(2) .ico{

background-image: url(https://res.hjfile.cn/cc/cctalk.hujiang.com/home/images/feature-icon2@2x-1raFv.png);

}

.feature>.feature-item:nth-child(3) .ico{

background-image: url(https://res.hjfile.cn/cc/cctalk.hujiang.com/home/images/feature-icon3@2x-2y1F0.png);

}

.feature>.feature-item:nth-child(4) .ico{

background-image: url(https://res.hjfile.cn/cc/cctalk.hujiang.com/home/images/feature-icon4@2x-27VL5.png);

}

.feature-item>.tit{

padding: 0;

margin: 0;

font-size: 16px;

line-height: 26px;

color: #333;

text-align: center;

font-weight: 400;

}

.feature-item>.des{

padding: 0;

margin: 0;

font-size: 16px;

line-height: 26px;

color: #333;

text-align: center;

opacity: .5;

}

.hp-overlay{

position: absolute;

left: 0;

top: 0;

width: 100%;

height: 100%;

z-index: 99999;

opacity: .5;

filter: Alpha(opacity=50);

background-color: #000;

}

.hp-dialog{

width: 370px;

border-radius: 5px;

background-color: #fff;

outline: 0;

box-shadow: 0 5px 30px rgba(0,0,0,.2);

z-index: 1000000;

position: fixed;

left: 50%;

top: 50%;

-webkit-transform: translate(-50%,-50%);

-ms-transform: translate(-50%,-50%);

transform: translate(-50%,-50%);

}

.hp-box{

padding: 12px 30px 30px;

color: #333;

}

.hp-box h1{

line-height: 48px;

text-align: center;

font-size: 20px;

font-weight: 400;

margin-bottom: 12px;

}

.hp-box .error{

color: red;

line-height: 30px;

}

.hp-box input{

display: block;

width: 100%;

height: 42px;

padding: 10px 10px 10px 10px;

border-radius: 3px;

border: 1px solid #e5e5e5;

font-size: 14px;

line-height: 20px;

outline: 0;

-webkit-appearance: none;

appearance: none;

-webkit-transition: border .2s ease;

transition: border .2s ease;

margin-bottom: 30px;

box-sizing: border-box;

}

.hp-box button{

display: block;

width: 100%;

height: 42px;

background-color:#44b336;

border: 0;

border-radius: 3px;

color: #fff;

font-size: 18px;

line-height: 42px;

text-align: center;

outline: 0;

cursor: pointer;

}

.hp-box input:focus,.hp-box input:focus:hover {

border: 1px solid #44b336

}

.hp-box input:hover {

border: 1px solid #ddd

}

.hp-box input::-webkit-input-placeholder {

color: #ddd

}

.hp-box input::-ms-input-placeholder {

color: #ddd

}

.hp-box input::-ms-reveal {

display: none

}

.hp-box input::-ms-clear {

display: none

}

.footer .title{

font-size: 24px;

}

.footer .info{

letter-spacing: 2px;

}

然后修改 views 视图文件,按照继承的方式提取出公用部分。

增加公用视图

新建 /views/common/header.html

Node实战教程 |

新建 /views/common/footer.html

新建 /views/common/layout.html。注意,此处有模板变量 title 。

{{title}}

{% block head %} {% endblock %}

{% include "./header.html" %}

{% block body %}

{% endblock %}

{% include "./footer.html" %}

{% block content %}

{% endblock %}

layout.html 就是我们的基础页面。现在我们再为 home 创建专用的 layout-home.html,并在里面引用之前创建的样式表:

新建 /views/common/layout-home.html。注意,我们在 body 模块里又增加了一个 homeBanner 模块:

{% extends "./layout.html" %}

{% block head %}

{% endblock %}

{% block body %}

{% block homeBanner %}

{% endblock %}

  • 免费资源

    为天地立心

  • 体系知识

    为科技立命

  • 实战项目

    为大牛继绝学

  • 线下交流

    为教育开太平

{% endblock %}

公用部分提取完成之后,重写 home 交互页面。此时我们对登录功能的视图进行美化,有主页,登录,以及登录后的响应页面。

重写 home 业务的视图

新增 /views/home/index.html 首页

{% extends "common/layout-home.html" %}

{% block homeBanner %}

{% endblock %}

修改 /views/home/login.html 登录页面

{% extends "common/layout-home.html" %}

{% block homeBanner %}

{% endblock %}

{% block content %}

到达战场

{{content}}

GoGoGo

{% endblock %}

新增 /views/home/success.html 成功页面

{% extends "common/layout-home.html" %}

{% block homeBanner %}

{% endblock %}

增加完成后,需要对 home 的处理逻辑进行修改

重写 home 处理逻辑

修改 /service/home.js

module.exports = {

register: async function(name, pwd) {

let data

if(name == 'ikcamp' && pwd == '123456'){

data = {

status: 0,

data: {

title: "个人中心",

content: "欢迎进入个人中心"

}

}

}else{

data = {

status: -1,

data: {

title: '登录失败',

content: "请输入正确的账号信息"

}

}

}

return data

}

}

修改 /controller/home.js 中的 index 和 register 方法:

const HomeService = require("../service/home")

module.exports = {

// 修改 index 方法

index: async function (ctx, next) {

await ctx.render("home/index", {title: "iKcamp欢迎您"})

},

// 修改 register 方法

register: async function (ctx, next){

let params = ctx.request.body

let name = params.name

let password = params.password

let res = await HomeService.register(name,password)

if(res.status == "-1"){

await ctx.render("home/login", res.data)

}else{

ctx.state.title = "个人中心"

await ctx.render("home/success", res.data)

}

}

}

运行代码,并通过浏览器访问 localhost:3000:

cebd1c0f6120409620543d235f7b6109.png

点击进入战场

96c07e8ec2c8b4785377d88e69d75f06.png

验证失败

0f63318aebb1854d3464da4614148e23.png

验证成功

a0a58f11e05a2b186edc77965c040131.png

目前,项目的基本功能都已完善。结构目录如下:

├── controller/

│ ├── home.js

├── service/

│ ├── home.js

├── views/

│ ├── common/

│ ├── header.html

│ ├── footer.html

│ ├── layout.html

│ ├── layout-home.html

│ ├── home/

│ ├── index.html

│ ├── login.html

│ ├── success.html

├── public/

│ ├── home/

│ ├── main.css

├── app.js

├── router.js

├── package.json

在后面的章节中,我们将进一步完善其他功能,例如 JSON 数据传递,错误处理机制,日志记录功能等。

下一篇:提升篇 - 解析JSON——让 Koa2 支持响应 JSON 数据

1460000010887896

推荐: 翻译项目Master的自述:

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

CCTalk4.5.18.92 1.黑板讲义支持激光笔,以及白板笔涂画 2.修复一些界面问题,以及性能问题 CCTalk4.5.17.90 1.改进注册账号体验,不用再跳到网页浏览器 2.优化主面板学习中心入口,展示更明显 3.进教室时支持提醒测试麦克风 4.教室里听课时,支持一键优化语音卡顿 5.教室里的大喇叭通告支持网址可点 6.优化教室视频授课的性能 7.增加对新黑板讲义的兼容提醒 8.修复打开学习中心时有时CT崩溃的问题 9.修复打开教室窗口时,教室名称显示较慢的问题 10.修复教室窗口在系统任务栏上没有显示名称的问题 11.修复“主面板-我的教室”里添加按钮打开界面不对的问题 12.修复某些情况下挂机时CT崩溃的问题 CCTalk4.5.17.88 1.优化主面板学习中心入口,展示更明显 2.教室里听课时,支持一键优化语音卡顿 3.改进注册账号体验,不用再跳到网页浏览器 4.修复打开学习中心时有时CT崩溃的问题 5.修复打开教室窗口时,教室名称显示较慢的问题 6.修复教室窗口在系统任务栏上没有显示名称的问题 7.修复“主面板-我的教室”里添加按钮打开界面不对的问题 8.修复某些情况下挂机时CT崩溃的问题 CCTalk4.5.17.82 1.全新的“学习中心”,内容更丰富、选课更便捷 2.改进了课程推荐的消息弹窗体验 3.改进了CT程序内网页相关功能的稳定性 CCTalk4.5.16.76 1.支持答题功能,目前支持单选题,并且可以设置题干和答案 2.支持给老师献花,献花由参加答题答对获得 3.优化了讲义上传速度和体验,支持显示上传进度 4.支持登录CT时自动打开学习中心,CT设置里支持可选 5.群公告支持直接点击网址链接 6.优化屏幕分享,解决画面卡顿问题 7.客户端更新了黑板讲义底部操作栏的视觉样式 8.修复分享讲义多人无效的问题 9.修复用新建议系统分享给用老版本的用户,然后看不到讲义的问题 10.修复主界面搜索结果里,键盘快键键选不到群的问题 11.修复CT系统托盘的右键菜单被未读消息小盒子窗口挡住的问题 12.修复CT自升级时不停弹通知的问题 CCTalk4.5.15.66 1.优化了CT本身运行稳定性 2.优化了教室黑板的运行性能 3.修复了教室黑板的一些问题 CCTalk4.4.14.62 1.优化黑板讲义界面和操作 2.优化讨论组和群聊天消息的稳定性 3.修复消息发送成功但仍然提示发送失败的问题 4.修复主界面搜索结果里群排在讨论组后面的问题 5.修复有时没操作但出现语音聊天请求的问题 6.修复千人群里成员显示不全的问题 CCTalk4.4.12.54 1.增加群功能,方便私密群体交流 2.支持老师打开自己的摄像头进行视频授课 3.支持老师分享自己的屏幕进行授课 4.讨论组和群里支持屏蔽别人发的音效 5.支持快捷键提取未读新消息,默认Alt+Z 6.聊天窗口里,支持显示最近的10条历史消息 7.优化聊天窗口里滚动查看多张图片时的体验 8.优化打开和翻看聊天记录时的滚动条的默认位置体验 9.CT截图工具栏采用了新的视觉设计 CCTalk4.1.3.18 该版着重优化了新消息的提醒体验,建议大家更新。 1.新消息支持在系统托盘闪烁提醒,弹窗打扰不再有 2.增加“未读消息管理器”,方便批量查看新消息 3.“未读消息管理器”支持批量处理好友请求 4.主界面增加“我的网校”,同步网校消息中心通知 5.教室里增加当前和近期公开课节目预告 6.教室里增加大喇叭置顶广播通知 7.主界面“我的头像”鼠标悬浮时支持显示“我的名片” 8.优化1对1语音的一些界面和提示信息 9.支持显示好友当前所在教室,可以直接点击进入 10.更新了升级界面,并修复了一些问题 4.0.1.10 1.优化主界面和直播教室界面布局,全新的视觉设计 2.增加“我的课程表”,公开课预约日程一清二楚 3.我的好友支持添加分组,方便管理好友 4.支持批量移动好友到其它分组 5.支持鼠标拖曳移动好友到其它分组 6.支持鼠标拖曳改变好友分组排序 7.主界面搜索支持搜课、搜教室、搜好友 8.主界面搜索结果里,支持右键快捷操作 9.支持鼠标拖曳移动私聊会话标签的排序 10.改进教室公告,不再每次都弹出,有未读条目时显示数字提示 CCTalk3.2.6.68 1.增加举报恶意用户功能,共同维护良好学习环境 2.改进开机时自动登录的性能 3.支持特殊字符(包括空格)的用户名登录 4.断网后,教室里支持自动重连、无需退出教室 5.优化黑板的演示性能,解决某些情况下卡顿的问题 6.优化语音传输性能,修复某些情况下没有声音的问题 CCTalk3.1.5.62 1.增加支持用户名、邮箱和手机号登录 2.改进CT热键设置与其它软件相同时的逻辑和提示
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值