1. 工程说明

该工程是基于 Express 库,编写的一个 API 查询返回的一个微型应用。

API Resource 就是把 API 的内容当做网络资源去处理。工程中的路由访问也是返回 API 内容资源

该工程采用 MVR 模式,即 Model-View-Route。也就是访问路由(Route)地址,返回视图(View)信息。同时,返回的内容也是从数据模型(Model)中处理组装出来的。

  关于 MVR 的个人理解:

    (MVR)模型-视图-路由 模式 不同于 (MVC)模型-视图-控制 模式。

    MVC 是以控制器来区分工程中的各种功能的实现,而 MVR 是以路由URL,绑定地址访问的方式来实现工程中各种业务功能。

    相比较而言 MVR 更扁平 因为它可以设计一系列的地址内容来进行数据的整理和组装 而 MVC 模式的地址是通过 Controller 控制器框架自行组装的,理解起来更复杂。

2. 工程目录

ntask-api
|----libs
| |----boot.js # 启动文件
| |----middlewares.js # 配置app端口等参数
| |----config.js # 数据库基本参数
|
|----models
| |----tasks.js # 数据模型 tasks 数据库定义
| |----users.js # 数据模型 users 数据库定义
|
|----routes
| |----index.js # '/' url访问
| |----tasks.js # '/tasks' url访问
|
|----index.js # 主脚本
|----db.js # 数据库创建连接脚本

3. 工程分析

  • 工程采用 ES6 语言编写,需要使用 babel-present-es2015 进行编译成 ES5 语言来进行执行。
  • index.js 文件中使用 consign 引入各种路径脚本资源。
  • db.js 是首先需要被 consign 加载进入系统中的,用于实现models模型定义的数据库的全局变量 db 整合入所有的数据库信息。
  • libs/config.js 记录有数据库的配置信息,本工程中采用的是 sqlite3 数据库系统,用于数据的处理。
  • models 文件夹中定义了 sqlite3 被操作的表,并且在 db.js 脚本中被引入,通过 sequelize 进行wenjj数据化,创建数据库和关联数据表等。本工程有两个数据模型,也即数据库中两个数据表,Users和Tasks,而且Users 1 -> N Tasks。
  • routes 文件夹定义了该工程API的路由信息,不同的地址对应不同的视图(此项目中的视图使用 JSON 数据返回代替)。

4. 启动工程

5. 源码

Build Apis With Node.js》(git checkout cc07683) 实现第5章节内容:Working with SQL database

> git clone https://github.com/caio-ribeiro-pereira/building-apis-with-nodejs.git

> cd building-apis-with-nodejs

building-apis-with-nodejs> git checkout cc07683

Note: checking out 'cc07683'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at cc07683 implementing chapter 5 building-apis-with-nodejs>

一个迷你的 Node.js 基于 Express 的 MVR 模式的 API工程 的分析的更多相关文章

  1. Node.js基于Express框架搭建一个简单的注册登录Web功能

    这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...

  2. node.js,express入门看详细篇

    先最简单的代码 安装 npm install express app.js 代码内容 const express = require('express') const app = express() ...

  3. 如何设计一个基于Node.js和Express的网站架构?

    前言 今年七月份,我和几个小伙伴们合伙建立了一个开发团队.业务开展如火如荼的同时,团队宣传就提上了日程,所以迫切需要搭建公司网站出来.确定目标后我们就开始考虑如果构建一个企业网站.先是进行业内调查,看 ...

  4. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

  5. LIGHTX-CMS —— 基于 Node.js,Express.js 以及 SQLite 3 搭建的个人博客系统

    概述 LIGHTX-CMS 是我基于 Node.js,Express.js 以及 SQLite 3 搭建的个人博客发布系统. 项目本身可以拿来部署个人博客网站,同时我认为其也适合用以新手学习 Node ...

  6. Node.js系列-express(上)

    前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...

  7. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

  8. Feathers JS – 基于 Express 构建数据驱动的服务

    Feathers 是一个轻量的 Web 应用程序框架,基于 NodeJS 最流行​​的 Web 框架——Express.这使得它很容易使用 socket.io 来创建 RESTful Web 服务和实 ...

  9. node.js框架express的安装

    node.js框架express的安装 首先假定你已经安装了 Node.js,接下来为你的应用创建一个目录,然后进入此目录并将其作为当前工作目录. $ mkdir myapp $ cd myapp 通 ...

随机推荐

  1. Perl 学习笔记-文件测试

    1.文件测试操作符 针对文件和目录的测试操作符: -r/-w/-x/-o: 文件或目录, 对有效的(负责运行这个程序的)用户或组来说是可读/写/执行/拥有 的; 这些测试位会查看文件的权限位, 以此判 ...

  2. Ubuntu14.04下使用PPA安装php5.6,php7

    1.为了使用ppa(Personal Package Archives) 选安装依赖: # apt-get install python-software-properties 2.添加不同版本php ...

  3. maven 引用本地jar

    1.添加lib文件夹在src文件夹中.2.拷贝所需要的test.jar包到lib文件夹.3.在pom文件加入如下依赖 <!--添加本地私有包--><dependency> &l ...

  4. CodeForces 681C Heap Operations (模拟题,优先队列)

    题意:给定 n 个按顺序的命令,但是可能有的命令不全,让你补全所有的命令,并且要求让总数最少. 析:没什么好说的,直接用优先队列模拟就行,insert,直接放入就行了,removeMin,就得判断一下 ...

  5. C#记录程序运行时间

    主要:using System.Diagnostics;当中有Stopwatch类: 介绍如下: // 摘要: // 提供一组方法和属性,可用于准确地测量运行时间. public class Stop ...

  6. 昨天发现的nginx默认不支持下划线引起angular-phonecat项目部分文件404问题

    今天发现原来确实是不存在这个文件... 因为我的Ubuntu的git没有安装,所以导致bower install时没有拉下来依赖包,因为bower是使用的git拉的包. 但是同时也搜到了nginx不支 ...

  7. Crystal Report保留小数位

    If IsNull({DECL_INV_ITEM_I.DECLEAR_NO}) Or Trim({DECL_INV_ITEM_I.DECLEAR_NO}) = "" Then &q ...

  8. jquery实现简单抽奖功能

    一直纠结要怎么用jquery实现抽奖功能,看别人很多都是用flash制作的,找了很多资料,最终找到一个比较适合需求的,我做了些许调整,以下是代码展示(复制下来可以直接使用). 先上图:

  9. Partition--分区切换

    现有数据表[dbo].[staging_TB1_20131018-104722]和分区表[dbo].[TB1],需要将分区表和数据表中做数据交换 CREATE TABLE [dbo].[staging ...

  10. nutch2.1+mysql+elasticsearch整合linux单机部署

    这次主要介绍下nutch2.1和mysql和elasticsearch的整合,是在单机上运行,并不是分布式部署.1.下载nutch2.1 nutch下载地址:http://labs.mop.com/a ...