Node.js的REST简介以及express框架

1.REST简介

REST是指表述性状态传递(Representational State Transfer,简称REST),是Roy Fielding 博士在2000年他的博士论文中提出来的一种软件架构风格。

表述性状态转移是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP、URI和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准。REST通常使用JSON数据格式。

以下为REST基本架构的四个方法:

GET-用于获取数据。

PUT -用于添加数据。

DELETE-用于删除数据。

POST -用于更新或添加数据。

2.RESTful Web Service

web Service是一个平台独立的、低耦合的、自包含的、基于可编程的Web的应用程序,可使用开放的XML标准来描述、发布、发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

RESTful是基于REST 架构的wWeb Service。

由于轻量级以及通过HTTP直接传输数据的特性,Web服务的 RESTful方法已经成为最常见的替代方法。可以使用各种语言(比如Java、C#、Python、PHP和Javascript [包括Ajax ])实现客户端。

例如,我们需要实现订单管理功能,就可以如下设计Web 服务的URL:

HTTP方法示例行为
GEThttp://exaple.com/api/orders获取订单列表
GEThttp://exaple.com/api/orders/123获取某个特定订单的信息
POSThttp://exaple.com/api/orders创建新订单
PUThttp://exaple.com/api/orders/123更新订单
DELETEhttp://exaple.com/api/orders/123删除订单

3.创建RESTful

{
    "user1":{
        "id":1,
        "name":"张三",
        "password":"password",
        "profession":"教师"
    },
    "user2":{
        "id":2,
        "name":"张三",
        "password":"password",
        "profession":"教师"
    },
    "user3":{
        "id":3,
        "name":"张三",
        "password":"password",
        "profession":"教师"
    }
}

基于以上数据,我们创建以下RESTful API:

URLHTTP方法发送内容结果
listUsersGET显示用户列表
user:idGET显示用户详细信息
addUserPOSTJSON字符串添加新用户
delete User:idDELETE删除用户

3.1

const { log } = require('console')
const express = require('express')
const app = express()
// fs对象用来操作本地文件    语法与Linux相似
const fs = require('fs')
​
// get用于获取数据
app.get('/api/users',function(req,res){
    fs.readFile(__dirname+'/users.json','utf-8',function(err,data){
        if (err) {
            res.end("错误")
        }else{
            res.writeHead(200,{'Content-Type':'Text/plain;charset=utf-8'})
            res.end(data)
        }
    })
})
​
​
// post用于添加
let user4={
        "id":4,
        "name":"张si",
        "password":"password",
        "profession":"教师"
}
app.post('/api/users',function(req,res){
    fs.readFile(__dirname+'/users.json','utf-8',function(err,data){
        if (err) {
            res.end("错误")
        }else{
            // 将字符串变成对象(反序列化)
           let list =  JSON.parse(data)
           list['user4']=user4
           res.writeHead(200,{'Content-Type':'Type/plain;charset=utf-8'})
        //    将对象变成字符串(序列化)
           res.end(JSON.stringify(list))
        }
    })
})
​
​
// 动态路由
app.get('/api/users/:id',function(req,res){
    fs.readFile(__dirname+'/users.json','utf-8',function(err,data){
        if (err) {
            res.end("错误")
        } else {
            // 将字符串转换成对象(反序列化)
            // res.end(req)
            let list = JSON.parse(data)
            let user = list[`user${req.params.id}`]
            res.writeHead(200,{'Content-Type':'Type/plain;charset=utf-8'})
            res.end(JSON.stringify(user))
        }
    })
})
​
// 删除用户
app.delete('/api/users/:id',function(req,res){
    fs.readFile(__dirname+'/users.json','utf-8',function(err,data){
        if (err) {
            res.end("错误")
        } else {
            let list = JSON.parse(data)
            // 删除list对应的id的数据
            delete list[`user${req.params.id}`]
            res.writeHead(200,{'Contene-Type':'Text/plain;charset=utf-8'})
            res.end(JSON.stringify(list))
        }
    })
})
app.listen(8888)

4.数据类型介绍

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

1.mysql中编码和字符

在mysql中,一个中文汉字所占的字节数与编码格式有关:

·如果是GBK编码,则一个中文汉字占2个字节,英文占1个字节

·如果是UTF8编码,则一个中文汉字占3个字节,而英文字母占1字节。

比如定义某个字段数据类型为: varchar(32),表示这个可以存储32个字符,此时表示的是字符,所以跟中英文无关,也就是该字段可以存储32个中文,或者是32个英文,或者是32个中文和英文的混搭都行。但如果字符数超过32个的话就会报错。

2.数值类型

MySQL支持所有标准SQL数值数据类型,mysql 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。并且MySQL允许我们指定数值字段中的值是否有正负之分(UNSIGNED)或者用零填补(ZEROFILL)

在MySQL中支持的5个主要整数类型是TINYINT,SMALLNT,MEDIUMINT,INT和BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。浮点型有:FLOAT、DOUBLE、DECIMAL。

下面的表显示了需要的每个数值类型的存储所占用的字节和可表示的数值范围:

1 bit 即1位 1字节= 8 bit 1K=1024字节 1M= 1024K

类型大小范围(有符号)范围(无符号)用途
TINYINT1 Bytes(-128,127)(0,255)小整数值
SMALLINT2 Bytes(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 Bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 Bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 Bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 Bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度 浮点数值
DOUBLE8 Bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

3.字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型大小用途
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型大小 ( bytes)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME8'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'YYYY-MM-DD hh:mm:ss混合日期和时间值
TIMESTAMP4'1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07YYYY-MM-DD hh:mm:ss混合日期和时间值,时间戳

 

通过Express脚手架安装

使用命令行进入项目目录,执行以下命令,安装(express-generator :

npm install express-generator -g

执行以下命令,创建一个名为Study的 Express应用,并使用ejs模板引擎:

express --view=ejs Study

进入Study并安装依赖:

cd Study
npm install

使用一下命令启动Express应用:

SET DEBUG=study:* & npm start

通过Express命令来快速创建

express Study -e
cd Study
npm install

Express应用热加载

不管是Node.js 原生开发,还是借助express等框架开发应用,在对代码做出更新后,都是需要重启服务以生效我们的文件的。为项目添加热加载,可以避免一次次手动的重启操作,节省精力。

开启热加载,我们需要借助一个node.js的开发工具nodemon。运行以下命令来安装它:

npm install -g nodemon

安装好以后,我们就可以通过以下命令启动应用:

nodemon ./bin/www
//nodemon   地址

Rabbit.js 的定位是一个超轻量的快速开发框架。Light and Fast。你甚至很快就可以理解它的底层实现(也许只需要5分钟)。Rabbit.js本身的代码量并不大,这得益于很多NodeJS开源库的支持,通过 一些有效的组合,成为这样一个简单而清晰的开发框架。 Rabbit.js 能够提供一个清晰的开发思路,让你的应用逻辑清晰并且足够结构化,但是同时又不会增加你的开发复杂度,相反,复杂度被降低,因为在逻辑分层的过程中对很多操作做了封装,你要做的就是关注自己需要关注的逻辑代码,而不用关心框架本身。 Rabbit.js 是一个依靠约定和封装进行工作的框架,秉承约定大于配置的快速开发理念,高度自动化,提高开发效率。不过可能因此降低了一些灵活性,但是本框架的定位决定 其使用场景,Rabbit.js比较适合于中小型项目或者个人项目,得益于其快速开发的特点,可以快速搭建restfull的网络服务。 特色 清晰的应用分层,可以帮助您构建大型的应用,具体见章节“分层” 约定大于配置,基本无需配置,即可开始开发之旅。 约定大于配置,团队合作写出来的应用代码基本一致,方便统一代码风格。 应用的restful的route完全根据目录结构自动生成,无需自己声明和指定。 controller和view之间拥有自动映射,你在controller里无需指定渲染的view路径。 分层之间不采用跳路径方式应用,而是根据名字寻找,无需关心自己和别的分层中得js得目录结构关系。 将controller层,service层,model层做了抽象封装,大部分通用逻辑都已经默认添加,极大的减少代码量。 对model层做了特别封装,同时支持sql和mongodb,写法完全一样。 model层封装成了promise的写法,让你的数据操作更清晰简介。 功能插件系统,开发中,常用的服务器功能一句话引入,例如用户系统,无需开发。 默认为您配置了一个可用的express服务器。 clone下来,查看文档,立马开始您的开发之旅。 标签:Rabbit  Web框架
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值