本文将介绍如何基于node-koa搭建一个完整的mvc及restAPI的项目,项目封装了路由、模板引擎、 静态文件加载等基本功能;首先介绍项目的安装启动及目录结构说明,然后通过一个简单的登录页说明mvc的搭建和使用、通过一个人员表格的增删查改说明restAPI的搭建和使用,最后将简单说明各模块的实现方式;

完整项目地址: https://github.com/pangyongsheng/node-koa-REST-API 

一、下载安装并启动项目

  下载:     git clone https://github.com/pangyongsheng/node-koa-REST-API.git

  切换到目录 :   cd koa

  安装依赖包:    npm install

  启动项目:   npm run start 

访问:         http://127.0.0.1:3000/

  界面如下:

  

二、项目目录结构说明

  koa        
  ├── app.js          服务启动文件 
  ├── controller.js   遍历controllers文件夹下全部接口文件添加到路由中
  ├── rest.js     封装restAPI返回数据处理,简化api写法--rest方法
  ├── templating.js  封装模板引擎载入view下模板文件,--render方法 
  ├── static-file.js  封装静态文件加载方法 
  │
  ├── controllers   该目录下放置所有接口文件,如:
      ├── api.js    restAPI接口
      ├── index.js   首页接口
      ├── ...
  ├── view       该目录下放置视图模板文件,可使用nunjucks模板语法:如
      ├── base.html   基础模板-header及footer 
      ├── index.html   首页
      ├── ...
  ├──server      该目录下放置数据处理类js文件:如抽取同类业务数据处理方法
      ├──server.js
      ├── ...
  ├──data       该目录下放置数据库处理文件
      ├──config.js   数据库配置文件
      ├── ...
  ├──static      改目录下放置前端静态文件,如一些前端类库、ui、及图片等
     ├──css
     ├──js
     ├──...
  ├── package.json

三、MVC搭建登录页

1、编写页面代码

(1)在view目录下创建base.html文件,编写页面页面头部和尾部的代码作为视图部分,在这里我们用到了nunjucks的模板语法,这样可以让其他的页面直接调用base.html的代码;

      

页面代码如上图,这里面把文档申明及<head>内的代码、<header>和<footer>三部分代码作为公共部分

其他页面可以直接调用base.html然后编写中间的内容(即{% block main%}到{% endblock}中间)即可;

这里注意 <title>标签内为{{title}},这里需要我们在调用页面时直接传入标题名称字段;

(2)在view'目录下创建index.html,编写登录页表单代码;

      

这里我们首先通过{{% extends "base.html" %}}引入公共视图部分,然后在{{%block mian%}}和{{%block end%}}编写登录表单;

2、添加访问接口

(1)在controllers目录下创建index.js文件,作为登录页面的接口文件;

      

这里,'GET /'表示请求方式为 get 请求url为/  即默认路径

ctx.render是已经封好的方法,传入要返回的页面文件即可,这里我们返回登录页,及index.html页

传参{title:'KOA'}是我们给页面模板传的参数,及在前面模板中<title>预留的值,

(2)访问hostlocal:3000/即可看到如下登录页:

      

3、添加表单处理接口(post)

   上一步总完成登录页的功能,在登录点击提交时,会将post请求提交到/signin,

首先我们按以上的方式在view目录下编写页面登录成功signin-ok.html和失败sigin-fialed.html;(详细代码见项目)

在controller目录下编写signin.js处理登录提交到post /signin的信息;

      

'POST /signin' 表示请求方式和请求url为/signin

通过ctx.request.body获取请求参数判断数据是否正确,并返回对应的页面

      

四、restAPI实现表格信息的增删查改

1、创建一个人员信息表格页面

(1)在view目录下编写视图文件userList.html (并在页面中添加js逻辑代码)

      

      

为了简化代码这里使用vue双向绑定实现,注意:vue中模板编译和nunjucks编译{{}}符号会冲突 ,需修改vue的编译格式,在vue中配置delimiters:['${', '}']  

   页面中使用v-for循环显示表格,在js中添加方法getlist通过接口api/userlist获取全部数据,并在vue生命周期created中调用改方法。(详细代码见项目中view/userList.html)

get/api/userlist接口在下一节介绍

(2)在controllers目录下添加访问接口list.js

        

与前面登录方法类似,访问接口为 get /user

(3)访问hostlocal:3000/user即可看到如下页面:

      

页面完成后我们将通过restAPI接口实现页面所示按钮的增删查改各项功能

2、编写获取全部人员信息的rest接口

(1)在data目录下创建data-userlist.js作为模拟数据,(模拟数据库返回数据,为方便这里不使用数据库)

       

(2)在server目录下编写user.js编写数据处理方法,供rest接口使用

这里创建getAllUser方法直接返回data-userlist中的全部数据

      

(3)在controllers目录下创建api.js,用来放置restAPI接口

      

ctx.rest方法中封装了返回数据及错误处理等功能,这里直接传入返回的数据对象即可实现restAPI接口功能

(4)访问调用接口

在上一部中我们调用了该接口,返回人员列表数据,并通过列表渲染将数据展示到视图。

2、添加性别筛选功能

(1)在页面中添加筛选按钮,并绑定事件,调用性别筛选接口

       

      

(2)在api.js中添加api/userlist/m和api/user/f接口,分别用来返回男女人员信息列表

      

(3)在server/user.js添加获取数据方法

      

3、添加增加用户功能

(1)在页面中添加输入框及按钮,绑定添加事件

      

      

点击保存后put方式像接口api/adduser传参新增用户信息,在成功回调中调用getlist方法,获取最新用户信息;

(2)在api.js中添加put接口api/adduser-调用addUser方法

      

(3)在server/user.js中添加addUser方法,处理添加的数据

      

用户姓名,性别,年龄有前端传值,id由后台根据序号排列,然后存入数组

4、删除用户

(1)位页面删除按钮绑定事件并编写删除方法向api/userlist接口发送delete请求

在表格中我们已经添加了删除按钮并绑定了del方法,并传参id,下面直接看del方法

      

在del方法中调用了$tttp.delete方法向 api/userlist发送delete请求并 传入参数 id  (代码中'+x'),然后在成功回调中删除掉视图中的数据(这里也可以直接调用getuser方法)

(2)在api.js中增加delete请求借口,在接口中调用sever/user.js中的方法(注意这里获取参数方法)

      

这里我们通过ctx.parames.id获取上一步中的传参id,这里我们把参数在传递个server中的方法

(3)在server/user.js中添加删除数据方法

      

5、修改数据

(1)在页面表格table的部分行列中(可修改的格子)中添加可编辑属性,并在对应行操作区域添加保存按钮,并未保存按钮添加sev方法

      

接着编写sev方法,通过js操作dom的方法获取表格中的属性值,作为修改后的参数调用发送post请求到后台修改信息,在成功回调中调用getlist方法查询最新数据显示到页面,提升保存成功

      

(2)在api.js中添加修改信息接口

      

(3)在server/user.js下编写修改信息方法,(这把id作为索引或唯一标识使用)

      

至此mvc及restAPI实现增删查改功能均已添加,项目中还有搜索的功能与其他筛选方法类似,不做说明;

dome中用到了前端部分使用了vue.js、bootstrap、node模块中用了koa-router、koa-cors等模块详情见 package.json;

测试模块可数据库这里不做说明,但在项目中已添加,可使用;

各个模块功能也说明完毕,实现方法可直接看代码,有较清晰注释;

node-koa搭建MVC/RESTful API项目的更多相关文章

  1. 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务

    本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...

  2. 使用 Beego 搭建 Restful API 项目

    1 环境准备 首先你需要在你的环境安装以下软件: go:编程语言运行环境 git:版本控制工具 beego:go 语言流行的开发框架 bee:beego 配套的快速搭建工具 你喜欢的数据库:这里以 M ...

  3. 从0使用Ruby on Rails打造企业级RESTful API项目实战之我的云音乐

    本节对我们项目实现的功能和知识点做一个简单的介绍,因为是RESTful API项目,所以对于后端来说基本上没有什么UI界面可展示,那我们就在关键的点,使用客户端(Android)实现的效果图. 课程简 ...

  4. 快速创建Flask Restful API项目

    前言 Python必学的两大web框架之一Flask,俗称微框架.它只需要一个文件,几行代码就可以完成一个简单的http请求服务. 但是我们需要用flask来提供中型甚至大型web restful a ...

  5. 基于Node的PetShop,RESTful API以及认证

    前篇 - 基本认证,用户名密码 后篇 - OAuth2 认证 由于宠物店的业务发展需要,我们需要一种更加便捷的方式来管理日益增多的宠物和客户.最好的方法就是开发一个APP,我可以用这个APP来添加.更 ...

  6. 搭建一个Web API项目(DDD)

    传送阵:写在最后 一.创建一个能跑的起来的Web API项目 1.建一个空的 ASP.NET Web应用 (为什么不直接添加一个Web API项目呢,那样会有些多余的内容(如js.css.Areas等 ...

  7. 从 0 使用 SpringBoot MyBatis MySQL Redis Elasticsearch打造企业级 RESTful API 项目实战

    大家好!这是一门付费视频课程.新课优惠价 699 元,折合每小时 9 元左右,需要朋友的联系爱学啊客服 QQ:3469271680:我们每课程是明码标价的,因为如果售价为现在的 2 倍,然后打 5 折 ...

  8. ASP.NET MVC & Web API项目中集成MEF

    1.实现方式 //WebApi需要实现的接口 System.Web.Http.Dependencies.IDependencyResolver //MVC需要实现的接口 System.Web.Mvc. ...

  9. Yii2+Swagger搭建RESTful风格的API项目

    在现有的Advanced Template上搭建RESTful API项目的步骤: 本案例前提说明: 本例中不使用\yii\rest\ActiveController自动创建的API,而是自定义一个A ...

随机推荐

  1. Page visibility 页面可见性

    一直以来,判断页面是不是当前可见标签,浏览器有没有缩小都是比较麻烦的.   通过页面可见性API可以获得相关信息document.hidden  判断页面当前是不是可见的document.visibi ...

  2. 解决Webstom 2017中,输入法候选框无法显示问题

    一.问题: 如题,IDE编辑界面内,输入法的候选框没法显示,有时需要打中文注释,非常麻烦. 原因:IDE自带的OpenJDK与输入法存在冲突 二.解决: (1)在编辑界面,双shift,搜索:swit ...

  3. OpenTSDB-Querying or Reading Data

    Querying or Reading Data OpenTSDB offers a number of means to extract data such as CLI tools, an HTT ...

  4. Android OOM异常解决方案

    一,什么是OOM异常: OOM(out of Memory)即内存溢出异常,也就是说内存占有量超过了VM所分配的最大,导致应用程序异常终止: 二,为什么会产生OOM异常呢? OOM异常是Android ...

  5. PullToRefreshListView插件初次进入页面自动刷新

    只要将PullToRefreshListView源码中的: @Override protected void onRefreshing(final boolean doScroll) { /** * ...

  6. python 标准模块 string

    string 模块提供了一些用于处理字符串类型的函数 案例: #!/usr/bin/evn python #_*_ coding:utf-8 -*- import string text = &quo ...

  7. 07深入理解Java线程池

    之前面试baba系时遇到一个相对简单的多线程编程题,即"3个线程循环输出ADC",自己答的并不是很好,深感内疚,决定更加仔细的学习<并发编程的艺术>一书,到达掌握的强度 ...

  8. Zabbix 3.0 从入门到精通(zabbix使用详解)

    第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/服务器 的可用性 1.1.1 网站可用性 在软件系统的高可靠性(也 ...

  9. redis数据类型及常用命令介绍(图文实例)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhgAAAFLCAYAAACUdvXUAAAgAElEQVR4nO3da1da58L2fT5KfPvc96 ...

  10. Spring4 JDBC详解

    Spring4 JDBC详解 在之前的Spring4 IOC详解 的文章中,并没有介绍使用外部属性的知识点.现在利用配置c3p0连接池的契机来一起学习.本章内容主要有两个部分:配置c3p0(重点)和 ...