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

阎坚成
2023-12-01

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   地址

 类似资料: