初识KOA(上)

新一代node框架入门,前置知识:node基础,数据库基础,了解Koa怎么搭建服务器的,不适合通读,推荐跟文章实际操作(手把手教学)

如果有知识点未知请看:

ejs
koa文档
前端er,你真的会用 async 吗?
async/await 应知应会
如何避开 async/await 地狱

之前对JS异步,这一块有点生疏,多看点博客

简介

Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。

1.新建文件夹

初始化package.json,终端输入

npm init --yes

2.下载KOA

终端输入cnpm install koa

当前文件夹下会出来node_moudules,模块依赖包

3.安装nodemon

它会监测项目中的所有文件,一旦发现文件有改动,Nodemon 会自动重启应用

cnpm install nodemon -D -g 安装全局

4.在package.json中配置nodemon

123
"scripts": {      "start": "nodemon app.js"  }

5.在文件夹中新建文件app.js

1234
const Koa = require('koa')const app = new Koa()

app.listen(3000, () => console.log('Server started...'))

6.终端输入nodemon app.js测试启动

搭建服务器成功

7.测试导入一个koa 模块 koa-json

终端下载cnpm install koa-json

1234567
const Koa = require('koa')const json = require('koa-json')const app = new Koa()

app.use(json())app.use(async ctx => (ctx.body = { msg: 'Hello world!' }))app.listen(3000, () => console.log('Server started...'))

在浏览器查看,出现json

8. app.context

9.路由模块 Koa-router

终端输入cnpm install koa-router

123456
const KoaRouter = require('koa-router')   const router = new KoaRouter()   router.get('/test', ctx => (ctx.body = 'hello Router!'))       //配置路由模块   app.use(router.routes()).use(router.allowedMethods())

10.如果引入HTML的话,需要模板引擎ejs

终端输入cnpm install koa-ejs

123456789101112131415161718
const path = require('path')const render = require('koa-ejs')//配置模板引擎render(app, {    //当前路径的views文件夹    root: path.join(__dirname, 'views'),    layout: 'layout',    viewExt: 'html',    cache: false,    debug: false})

//路由跳转router.get('/', async ctx => {    await ctx.render('index', {        title: 'I love node'    })})
123456789101112131415161718
//layout.html

<html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">    <title>Document</title></head>

<body>    <div class="container">        <%- body %>    </div></body>

</html>
1234
//index.html<h1>    <%- title %></h1>

11.数据传递和渲染

123456789
//模拟数据const things = [{name:'friends'}, {name:'family'}]

router.get('/', async ctx => {    await ctx.render('index', {        title: 'I love node',        things: things    })})
12345678910
<h1>    <%- title %></h1><ul class="list-group">    <% things.forEach(thing =>{ %>        <li class="list-group-item">            <%= thing %>        </li>        <% }) %></ul>

12.导航和添加内容

12345
router.get('/add', showAdd)

async function (ctx) {    await ctx.render('add')}

新建文件夹partialsnavBar.html

123456789101112
//add<h1 class="display-4 mb-4">    添加</h1>

<form action="/add" method="POST">    <div class="form-group">        <input type="text" name="thing" class="form-control form-control-lg" placeholder="随便。。。">    </div>    <input type="submit" value="添加" class="btn btn-dark btn-lg">    <a href="/" class="btn btn-danger btn-lg">取消</a></form>
12345678910111213141516
//navBar<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">    <div class="container">        <a class="navbar-brand" href="#">Jason`s App</a>        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">          <span class="navbar-toggler-icon"></span>        </button>        <div class="collapse navbar-collapse" id="navbarSupportedContent">            <ul class="navbar-nav ml-auto">                <li class="nav-item">                    <a class="nav-link" href="/add">添加</a>                </li>            </ul>        </div>    </div></nav>

然后在layout.htmlbody中引入

<% include partials/navBar.html %>

最终效果

结语

这篇刚好入门,下一步将要解决如何完善功能和路由参数,本地服务器与刚学的MongoDB,创建测试接口等

由于不是写网页内容,侧重了解node后端就引用了Bootstrap的CSS样式

还会有下一篇文章,等我先学一下下,新手入门,高手轻喷。

原文:大专栏  初识KOA(上)

原文地址:https://www.cnblogs.com/dajunjun/p/11657771.html

时间: 2024-08-05 02:30:04

初识KOA(上)的相关文章

Objective-C字符串初识(上)

1.创建字符串 1 // 1 直接创建字符串 2 NSString * str = @"abc"; 3 4 // NSString * stra = [[NSString alloc] initWithString:@"def"]; 5 // 2 用C语言字符串创建OC字符串 6 char * p = "你好";  7 NSString * strc = [[NSString alloc] initWithCString:p encoding:N

初识ubuntu上的docker

最近几年,docker 技术越来越热门,它比虚拟机更灵活和方便,也节省资源,今天研究一下 在Ubuntu上使用docker 技术,有关dokcer技术的详细信息,大家可以自行网上搜索. ubuntu 目前对docker 支持非常好. 首先我们可以直接在ubuntu 上安装docker 支持. 在命令行下,运行 sudo apt install docker.io 正常的话,就会从源上下载并安装 安装完后,我们就可以运行,检查一下docker对版本 docker 的三大核心概念:镜像(Image)

初识Kafka----------Centos上单机部署、服务启动、JAVA客户端调用

作为Apach下一个优秀的开源消息队列框架,Kafka已经成为很多互联网厂商日志采集处理的第一选择.后面在实际应用场景中可能会应用到,因此就先了解了一下.经过两个晚上的努力,总算是能够基本使用. 操作系统:虚拟机Centos 6.5 1.下载Kafka安装文件,首先进入官网,找到最新的稳定版本     wget http://mirrors.hust.edu.cn/apache/kafka/0.10.2.0/kafka_2.12-0.10.2.0.tgz 2.解压并拷贝到 需要的目录下,我的设定

koa源码阅读[2]-koa-router

koa源码阅读[2]-koa-router 第三篇,有关koa生态中比较重要的一个中间件:koa-router 第一篇:koa源码阅读-0第二篇:koa源码阅读-1-koa与koa-compose koa-router是什么 首先,因为koa是一个管理中间件的平台,而注册一个中间件使用use来执行.无论是什么请求,都会将所有的中间件执行一遍(如果没有中途结束的话)所以,这就会让开发者很困扰,如果我们要做路由该怎么写逻辑? app.use(ctx => { switch (ctx.url) { c

图解集合6:LinkedHashMap

初识LinkedHashMap 上两篇文章讲了HashMap和HashMap在多线程下引发的问题,说明了,HashMap是一种非常常见.非常有用的集合,并且在多线程情况下使用不当会有线程安全问题. 大多数情况下,只要不涉及线程安全问题,Map基本都可以使用HashMap,不过HashMap有一个问题,就是迭代HashMap的顺序并不是HashMap放置的顺序,也就是无序.HashMap的这一缺点往往会带来困扰,因为有些场景,我们期待一个有序的Map. 这个时候,LinkedHashMap就闪亮登

图解集合2:LinkedList

初识LinkedList 上一篇中讲解了ArrayList,本篇文章讲解一下LinkedList的实现. LinkedList是基于链表实 现的,所以先讲解一下什么是链表.链表原先是C/C++的概念,是一种线性的存储结构,意思是将要存储的数据存在一个存储单元里面,这个存储单元里面除了 存放有待存储的数据以外,还存储有其下一个存储单元的地址(下一个存储单元的地址是必要的,有些存储结构还存放有其前一个存储单元的地址),每次查找数据 的时候,通过某个存储单元中的下一个存储单元的地址寻找其后面的那个存储

Vue2 + Koa2 实现后台管理系统

看了些 koa2 与 Vue2 的资料,模仿着做了一个基本的后台管理系统,包括增.删.改.查与图片上传. 工程目录: 由于用到了 async await 语法,node的版本需要至少7.0,我目前用的是 7.9.0 1. 根据 package.json 安装好依赖: { "name": "vue2.x-koa2.x", "version": "1.0.0", "description": "A V

在BAE上发布koa应用

1.以最新标准(ES7)写koa应用2.编译:babel sourc_folder_name -d target_folder_name3.进入target_folder,依次执行下面的命令 git status -s git add -A git commit -m "comment" git push 注意: 1. require('babel-polyfill'); 必须写在所有代码之前(babel-node方式执行时不需要)原因:es6中Generators使用babel编译时

黏包-黏包的成因、解决方式及struct模块初识、文件的上传和下载

黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数据会直接丢失,俗称丢包) #面试 #首先只有在TCP协议中才有黏包现象,是因为TCP协议是面向流的协议, #在发送的数据传输的过程中还有缓存机制来避免数据丢失 #因此在连续发送小数据的时候,以及接收大小不符的时候,都容易产生黏包现象 #本质是不知道客户端发送的数据长度 面试中解释黏包 #连续send