koa、vue安装与使用

news2024/11/12 15:56:57

koa官网:https://koajs.com/

首选创建一个文件夹:mkdir koaDemo  (cmd即可)

文件夹初始化:npm init      (cmd即可)

初始化完成后就会产生一个package.json的文件。

安装:

npm install koa --save   (vscode的控制台中安装)

安装完成后在package.json文件中就会产生koa的依赖:

同时,在koaDemo文件夹下还会产生koa 相关的依赖(类比Maven)

官网的示例copy到js文件中(保存js文件)

const Koa = require('koa');    //引入koa的包
const app = new Koa();   // 创建Koa的实例

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);   // 监听的端口号

执行js文件:node app.js

网页访问:

koa轻量化的意思:所有内容都是中间件(middleware),都是接口

ctx是context,包括了request和response,所需要的东西都可以去ctx中去拿

以上代码的这部分是中间件:

async ctx => {
  ctx.body = 'Hello World';
})

模拟dispatcher的功能:

安装router:npm install @koa/router --save    (vscode的控制台中安装)

router的文档:https://github.com/koajs/router/blob/master/API.md

代码:

const Koa = require('koa');
const Router = require('@koa/router');

const app = new Koa();
const router = new Router();

router.get('/hello', (ctx, next) => {
    ctx.body = 'Hello World!!!!';
    })
    .get('/world', ctx => ctx.body = 'world hello!!!!')
    .get('/api', ctx => ctx.body = {"name":"shanghai", "time":"20241109"})
;

app.use(router.routes())
    .listen(4000);   // 监听的端口号

npm install koa-static koa-mount --save

const Koa = require('koa');
const Router = require('@koa/router');
const mount = require('koa-mount');
const serve = require('koa-static');

const app = new Koa();
const router = new Router();

router.get('/hello', (ctx, next) => {
    ctx.body = 'Hello World!!!!';
    })
    .get('/world', ctx => ctx.body = 'world hello!!!!')
    .get('/api', ctx => ctx.body = {"name":"shanghai", "time":"20241109"})
;

app
    .use(mount('/static', serve('.')))
    .use(router.routes())
    .listen(4000);   // 监听的端口号

创建一个静态的html页面hello.html:

在浏览器访问页面:

koa和前端项目打成一个包。

引入vue:

再次访问页面会变慢。

vue:页面的组件化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
</head>
<body>
    <div id="app">hello</div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello vue!'  //message
            },
            template:`
                <div>
                    <div>{{message}}</div>  
                    <input v-model="message"></input>
                    <Button v-on:click="myClick">submit</Button>  
                </div>
            `,
            methods:{
                myClick:function(){
                    console.log('clicked');
                }
            }
        })
    </script>
</body>
</html>

引入axios的包:<script src="https://unpkg.com/axios@1.6.7/dist/axios.min.js"></script>

axios的GitHub:https://github.com/axios/axios

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script src="https://unpkg.com/axios@1.6.7/dist/axios.min.js"></script>
</head>
<body>
    <div id="app">hello</div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello vue!',  //message
                fileName: ''
            },
            template:`
                <div>
                    <div>{{message}}</div>  
                    <input v-model="fileName"></input>
                    <Button v-on:click="myClick">submit</Button>  
                </div>
            `,
            methods:{
                myClick: async function(){
                    let resp = await axios.get(`/static/${this.fileName}`);
                    this.message = resp.data;
                }
            }
        })
    </script>
</body>
</html>

vue组件:

<body>
    <div id="app">hello</div>
    <script>
        Vue.component('Result',{
            data: function (){
                return{

                }
            },
            template: '<div>hello</div>'
        })

        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello vue!',  //message
                fileName: ''
            },
            template:`
                <div>
                    <div>{{message}}</div>  
                    <input v-model="fileName"></input>
                    <Button v-on:click="myClick">submit</Button>  
                    <Result></Result>
                </div>
            `,
            methods:{
                myClick: async function(){
                    let resp = await axios.get(`/static/${this.fileName}`);
                    this.message = resp.data;
                }
            }
        })
    </script>
</body>

引入iView组件:(可以改变前端的样式)

<!-- import stylesheet -->
<link rel="stylesheet" href="//unpkg.com/view-design/dist/styles/iview.css">
<!-- import iView -->
<script src="//unpkg.com/view-design/dist/iview.min.js"></script>

mount.js

const Koa = require('koa');
const Router = require('@koa/router');
const mount = require('koa-mount');
const serve = require('koa-static');

const app = new Koa();
const router = new Router();

router.get('/hello', (ctx, next) => {
    ctx.body = 'Hello World!!!!';
    })
    .get('/world', ctx => ctx.body = 'world hello!!!!')
    .get('/api', ctx => ctx.body = [{"location":"shanghai", "time":"20241109"},
                                    {"location":"shanghai", "time":"20241109"}]
    )
;

app
    .use(mount('/static', serve('.')))
    .use(router.routes())
    .listen(4000);   // 监听的端口号

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script>
    <script src="https://unpkg.com/axios@1.6.7/dist/axios.min.js"></script>
    <!-- import stylesheet -->
    <link rel="stylesheet" href="//unpkg.com/view-design/dist/styles/iview.css">
    <!-- import iView -->
    <script src="//unpkg.com/view-design/dist/iview.min.js"></script>
</head>
<body>
    <div id="app">hello</div>
    <script>
        Vue.component('Result',{
            props:['tableData'],
            data: function (){
                return{
                    columns1:[{title:"location",key:"location"},{title:"time",key:"time"}]
                }
            },
            template: '<Table :columns="columns1" :data="tableData"></Table>'
        })

        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello vue!',  //message
                fileName: '',
                apiData:[]
            },
            template:`
                <div>
                    <div>{{message}}</div>  
                    <input v-model="fileName"></input>
                    <Button v-on:click="myClick">submit</Button>  
                    <Result v-bind:tableData="apiData"></Result>
                </div>
            `,
            methods:{
                myClick: async function(){
                    // let resp = await axios.get(`/static/${this.fileName}`);
                    // this.message = resp.data;
                    let resp2 = await axios.get(`/api`);
                    this.apiData = resp2.data;
                }
            }
        })
    </script>
</body>
</html>

页面访问:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2237630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux:版本控制器git的简单使用+gdb/cgdb调试器的使用

一&#xff0c;版本控制器git 1.1概念 为了能够更方便我们管理不同版本的文件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是能让你 了解到⼀个文件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀个可以记录工程的每⼀次改动和版本迭代的⼀个…

ML 系列:第 21 节 — 离散概率分布(二项分布)

一、说明 二项分布描述了在固定数量的独立伯努利试验中一定数量的成功的概率&#xff0c;其中每个试验只有两种可能的结果&#xff08;通常标记为成功和失败&#xff09;。 二、探讨伯努利模型 例如&#xff0c;假设您正在抛一枚公平的硬币 &#xff08;其中正面成功&#xff…

【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美

文章目录 C 位运算详解&#xff1a;基础题解与思维分析前言第一章&#xff1a;位运算基础应用1.1 判断字符是否唯一&#xff08;easy&#xff09;解法&#xff08;位图的思想&#xff09;C 代码实现易错点提示时间复杂度和空间复杂度 1.2 丢失的数字&#xff08;easy&#xff0…

存算分离与计算向数据移动:深度解析与Java实现

背景 随着大数据时代的到来&#xff0c;数据量的激增给传统的数据处理架构带来了巨大的挑战。传统的“存算一体”架构&#xff0c;即计算资源与存储资源紧密耦合&#xff0c;在处理海量数据时逐渐显露出其局限性。为了应对这些挑战&#xff0c;存算分离&#xff08;Disaggrega…

WPS单元格重复值提示设置

选中要检查的所有的单元格 设置提示效果 当出现单元格值重复时&#xff0c;重复的单元格就会自动变化 要修改或删除&#xff0c;点击

Linux笔记之pandoc实现各种文档格式间的相互转换

Linux笔记之pandoc实现各种文档格式间的相互转换 code review! 文章目录 Linux笔记之pandoc实现各种文档格式间的相互转换1.安装 Pandoc2.Word转Markdown3.markdown转html4.Pandoc 支持的一些常见格式4.1.输入格式4.2.输出格式 1.安装 Pandoc sudo apt-get install pandoc # …

MySQL重难点(一)索引

目录 一、引子&#xff1a;MySQL与磁盘间的交互基本单元&#xff1a;Page 1、重要问题&#xff1a;为什么 MySQL 每次与磁盘交互&#xff0c;都要以 16KB 为基本单元&#xff1f;为什么不用多少加载多少&#xff1f; 2、有关MySQL的一些共识 3、如何管理 Page 3.1 单个 P…

solo博客使用非docker方式进行https部署

solo博客使用非docker方式进行https部署 数据库配置启动命令讲解设置自定义访问端口&#xff1a;9168 配置https访问部署效果 服务器上请通过 Docker 部署。但是我服务器资源有限&#xff0c;不想安装docker&#xff0c;直接以编译包的形式运行&#xff0c;节省资源。 如果不会…

【Steam登录】protobuf协议逆向 | 续

登录接口&#xff1a; ‘https://api.steampowered.com/IAuthenticationService/BeginAuthSessionViaCredentials/v1’ 精准定位&#xff0c;打上条件断点 this.CreateWebAPIURL(t) ‘https://api.steampowered.com/IAuthenticationService/BeginAuthSessionViaCredentials/v1…

环形链表问题(图 + 证明 + 题)

文章目录 判断链表是否有环返回链表开始入环的第一个结点 判断链表是否有环 题目链接 思路&#xff1a; 可以明确的是&#xff1a;若一个链表带环&#xff0c;那么用指针一直顺着链表遍历&#xff0c;最终会回到某个地方。 我们可以定义两个指针&#xff08;快慢指针&#xf…

Linux Centos7 如何安装图形化界面

如果系统是以最小安装的话,一般是不带有图形化界面的,如果需要图形话界面,需要单独安装。本篇教程,主要介绍如何在CentOS7中安装图形化界面。 1、更新系统 首先,保证系统依赖版本处于最新。 sudo yum update -y2、安装 GNOME 桌面环境 sudo yum groupinstall "GNOME…

Spark的学习-02

Spark Standalone集群的安装 架构&#xff1a;普通分布式主从架构 主&#xff1a;Master&#xff1a;管理节点&#xff1a;管理从节点、接客、资源管理和任务 调度&#xff0c;等同于YARN中的ResourceManager 从&#xff1a;Worker&#xff1a;计算节点&#xff1a;负责利用自己…

Linux相关概念和易错知识点(20)(dentry、分区、挂载)

目录 1.dentry &#xff08;1&#xff09;路径缓存的原因 &#xff08;2&#xff09;dentry的结构 ①多叉树结构 ②file和dentry之间的联系 ③路径概念存在的意义 2.分区 &#xff08;1&#xff09;为什么要确认分区 &#xff08;2&#xff09;挂载 ①进入分区 ②被挂…

《Linux运维总结:基于银河麒麟V10+ARM64架构CPU部署redis 6.2.14 TLS/SSL哨兵集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、简介 Redis 哨兵模式是一种高可用性解决方案,它通过监控 Redis 主从架构,自动执行故障转移,从而确保服务的连续性。哨兵模式的核心组件包括哨兵(Sentine…

vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动

文章目录 前言一、滚动元素相关属性回顾一、实现分析二、代码实现示例&#xff1a;2、继续添加功能&#xff0c;增加鼠标移入停止滚动、移出继续滚动效果2、继续完善 前言 列表自动滚屏效果常见于大屏开发场景中&#xff0c;本文将讲解用vue3实现一个无缝衔接、滚动平滑的列表自…

腾讯云nginx SSL证书配置

本章教程,记录在使用腾讯云域名nginx证书配置SSL配置过程。 一、nginx配置 域名和证书,替换成自己的即可。证书文件可以自定义路径位置。服务器安全组或者防火墙需要开放80和443端口。 server {#SSL 默认访问端口号为 443listen 443 ssl; #请填写绑定证书的域名server_name c…

RabbitMQ的DLX(Dead-Letter-Exchange 死信交换机,死信交换器,死信邮箱)(重要)

RabbitMQ的DLX 1、RabbitMQ死信队列2、代码示例2.1、队列过期2.1.1、配置类RabbitConfig&#xff08;关键代码&#xff09;2.1.2、业务类MessageService2.1.3、配置文件application.yml2.1.4、启动类2.1.5、配置文件2.1.6、测试 2.2、消息过期2.2.1、配置类RabbitConfig2.2.2、…

陪诊问诊APP开发实战:基于互联网医院系统源码的搭建详解

时下&#xff0c;开发一款功能全面、用户体验良好的陪诊问诊APP成为了医疗行业的一大热点。本文将结合互联网医院系统源码&#xff0c;详细解析陪诊问诊APP的开发过程&#xff0c;为开发者提供实用的开发方案与技术指导。 一、陪诊问诊APP的背景与功能需求 陪诊问诊APP核心目…

FreeRTOS 21:递归互斥信号量

递归信号量&#xff0c;见文知义&#xff0c;递归嘛&#xff0c;就是可以重复获取调用的&#xff0c;本来按照信号量的特性&#xff0c;每获取一次可用信号量个数就会减少一个&#xff0c;但是递归则然&#xff0c; 对于已经获取递归互斥量的 任务可以重复获取该递归互斥量&…

算法|牛客网华为机试41-52C++

牛客网华为机试 上篇&#xff1a;算法|牛客网华为机试21-30C 文章目录 HJ41 称砝码HJ42 学英语HJ43 迷宫问题HJ44 SudokuHJ45 名字的漂亮度HJ46 截取字符串HJ48 从单向链表中删除指定值的节点HJ50 四则运算HJ51 输出单向链表中倒数第k个结点HJ52 计算字符串的编辑距离 HJ41 称砝…