位置: 编程技术 - 正文

实现一个完整的Node.js RESTful API的示例(实现一个完整的主要任务)

编辑:rootadmin

推荐整理分享实现一个完整的Node.js RESTful API的示例(实现一个完整的主要任务),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:实现一个完整的数据库,实现一个完整的数据库,实现一个完整的主要任务,实现一个完整的实验程序,实现一个完整的实验程序,实现一个完整的视觉slam算法,实现一个完整的复数类的方法,实现一个完整的实验程序,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

这篇文章算是对Building APIs with Node.js这本书的一个总结。用Node.js写接口对我来说是很有用的,比如在项目初始阶段,可以快速的模拟网络请求。正因为它用js写的,跟iOS直接的联系也比其他语言写的后台更加接近。

这本书写的极好,作者编码的思路极其清晰,整本书虽说是用英文写的,但很容易读懂。同时,它完整的构建了RESTful API的一整套逻辑。

我更加喜欢写一些函数响应式的程序,把函数当做数据或参数进行传递对我有着莫大的吸引力。

从程序的搭建,到设计错误捕获机制,再到程序的测试任务,这是一个完整的过程。这边文章将会很长,我会把每个核心概念的代码都黏贴上来。

环境搭建

下载并安装Node.js 这个框架大家应该都知道,他提供了很丰富的功能,我在这就不做解释了,先看该项目中的代码:

不管是models,views还是routers都会经过 Express 的加工和配置。在该项目中并没有使用到views的地方。 Express 通过app对整个项目的功能进行配置,但我们不能把所有的参数和方法都写到这一个文件之中,否则当项目很大的时候将急难维护。

我使用Node.js的经验是很少的,但上面的代码给我的感觉就是极其简洁,思路极其清晰,通过 consign 这个模块导入其他模块在这里就让代码显得很优雅。

@note:导入的顺序很重要。

在这里,app的使用很像一个全局变量,这个我们会在下边的内容中展示出来,按序导入后,我们就可以通过这样的方式访问模块的内容了:

模型设计

在我看来,在开始做任何项目前,需求分析是最重要的,经过需求分析后,我们会有一个关于代码设计的大的概念。

编码的实质是什么?我认为就是数据的存储和传递,同时还需要考虑性能和安全的问题

因此我们第二部的任务就是设计数据模型,同时可以反应出我们需求分析的成果。在该项目中有两个模型, User 和 Task ,每一个 task 对应一个 user ,一个 user 可以有多个 task

用户模型:

任务模型:

该项目中使用了系统自带的 sqlite 作为数据库,当然也可以使用其他的数据库,这里不限制是关系型的还是非关系型的。为了更好的管理数据,我们使用 sequelize 这个模块来管理数据库。

为了节省篇幅,这些模块我就都不介绍了,在google上一搜就出来了。在我看的Node.js的开发中,这种ORM的管理模块有很多,比如说对 MongoDB 进行管理的 mongoose 。很多很多,他们主要的思想就是Scheme。

在上边的代码中,我们定义了模型的输出和输入模板,同时对某些特定的字段进行了验证,因此在使用的过程中就有可能会产生来自数据库的错误,这些错误我们会在下边讲解到。

hasMany 和 belongsTo 表示一种关联属性, Users.isPassword 算是一个类方法。 bcrypt 模块可以对密码进行加密编码。

数据库

在上边我们已经知道了,我们使用 sequelize 模块来管理数据库。其实,在最简单的层面而言,数据库只需要给我们数据模型就行了,我们拿到这些模型后,就能够根据不同的需求,去完成各种各样的CRUD操作。

上边的代码很简单,db是一个对象,他存储了所有的模型,在这里是 User 和 Task 。通过 sequelize.import 获取模型,然后又调用了之前写好的associate方法。

上边的函数调用之后呢,返回db,db中有我们需要的模型,到此为止,我们就建立了数据库的联系,作为对后边代码的一个支撑。

CRUD

CRUD在router中,我们先看看 router/tasks.js 的代码:

再看看 router/users.js 的代码:

这些路由写起来比较简单,上边的代码中,基本思想就是根据模型操作CRUD,包括捕获异常。但是额外的功能是做了authenticate,也就是授权操作。

这一块好像没什么好说的,基本上都是固定套路。

授权

实现一个完整的Node.js RESTful API的示例(实现一个完整的主要任务)

在网络环境中,不能老是传递用户名和密码。这时候就需要一些授权机制,该项目中采用的是JWT授权(JSON Wbb Toknes),有兴趣的同学可以去了解下这个授权,它也是按照一定的规则生成token。

因此对于授权而言,最核心的部分就是如何生成token。

上边代码中,在得到邮箱和密码后,再使用 jwt-simple 模块生成一个token。

JWT在这也不多说了,它由三部分组成,这个在它的官网中解释的很详细。

我觉得老外写东西一个最大的优点就是文档很详细。要想弄明白所有组件如何使用,最好的方法就是去他们的官网看文档,当然这要求英文水平还可以。

授权一般分两步:

生成token 验证token

如果从前端传递一个token过来,我们怎么解析这个token,然后获取到token里边的用户信息呢?

这就用到了 passport 和 passport-jwt 这两个模块。 passport 支持很多种授权。不管是iOS还是Node中,验证都需要指定一个策略,这个策略是最灵活的一层。

授权需要在项目中提前进行配置,也就是初始化, app.use(app.auth.initialize()); 。

如果我们想对某个接口进行授权验证,那么只需要像下边这么用就可以了:

配置

Node.js中一个很有用的思想就是middleware,我们可以利用这个手段做很多有意思的事情:

上边的代码中包含了很多新的模块,app.set表示进行设置,app.use表示使用middleware。

测试

写测试代码是我平时很容易疏忽的地方,说实话,这么重要的部分不应该被忽视。

测试主要依赖下边的这几个模块:

其中 supertest 用来发请求的, chai 用来判断是否成功。

使用 mocha 测试框架来进行测试:

生成接口文档

接口文档也是很重要的一个环节,该项目使用的是 ApiDoc.js 。这个没什么好说的,直接上代码:

大概就类似与上边的样子,既可以做注释用,又可以自动生成文档,一石二鸟,我就不上图了。

准备发布

到了这里,就只剩下发布前的一些操作了,

有的时候,处于安全方面的考虑,我们的API可能只允许某些域名的访问,因此在这里引入一个强大的模块 cors ,介绍它的文章,网上有很多,大家可以直接搜索,在该项目中是这么使用的:

这个设置在本文的最后的演示网站中,会起作用。

打印请求日志同样是一个很重要的任务,因此引进了 winston 模块。下边是对他的配置:

打印的结果大概是这样的:

性能上,我们使用Node.js自带的cluster来利用机器的多核,代码如下:

在数据传输上,我们使用 compression 模块对数据进行了gzip压缩,这个使用起来比较简单:

最后,让我们支持https访问,https的关键就在于证书,使用授权机构的证书是最好的,但该项目中,我们使用 helmet 模块:

前端程序

为了更好的演示该API,我把前段的代码也上传到了这个仓库

详解用Node.js实现Restful风格webservice Restful风格的WebService正在渐渐取代传统的SOAP,Java也有很多Restful的框架,很方便简洁,Jersey,restlet,甚至SpringMVC也可以,不得不说Rest让人从Web转型到WebSer

Nodejs调用WebService的示例代码 这两天一直在试着编写纯静态页面的js去调用由Java编写的WebService,一直无法成功(主要工期比较赶,待后面比较闲的时候再来研究,看能不能写一个纯

node通过express搭建自己的服务器 前言为了模拟项目上线,我们就需要一个服务器去提供API给我们调用数据。这次我采用express框架去写API接口。所有请求都是通过ajax请求去请求服务器来

标签: 实现一个完整的主要任务

本文链接地址:https://www.jiuchutong.com/biancheng/379543.html 转载请保留说明!

上一篇:Nodejs+angularjs结合multiparty实现多图片上传的示例代码

下一篇:详解用Node.js实现Restful风格webservice(nodejs使用视频教程)

  • 财务负责人如何解绑
  • 增值税留抵抵欠税政策解读
  • 个人缴纳职业年金是什么意思
  • 员工买东西自己垫付的钱怎么做账
  • 印花税申报减免额不能为0怎么报
  • 公司内控制度由谁制定
  • 工会经费返还怎么使用
  • 建筑企业收到招聘短信
  • 开仓库需要营业执照吗
  • 增值税一般纳税人证明文件
  • 公司过桥贷款怎么贷
  • 利息收入交税会计分录怎么做
  • 京东企业提现
  • 公司购买工装计入什么费用
  • 土地使用权作为固定资产的情况
  • 公允价值变动税务处理
  • 收到子公司非货币资产分配账务处理
  • 设备租赁公司购进设备怎么做账
  • 企业个人所得税申报系统官网
  • 企业在年度中间终止经营活动的,应当
  • 有进项无销项会计分录
  • 诉讼费和保全费什么时候能退还
  • 分公司可以单独签协议吗
  • 生产车间广告牌设计图片
  • 年底有留抵税额需要结转吗
  • 赠送算商业用途吗
  • 联营企业分得的利润应计入什么科目
  • 公司提取员工公积金
  • win7系统不可用怎么办
  • 农民专业合作社税收优惠政策
  • PHP:Memcached::getDelayedByKey()的用法_Memcached类
  • 小规模年底税金怎么算
  • 小规模纳税人销售货物税率是多少
  • php自定义字段
  • php使用教程
  • php消息实时推送完整示例
  • 拉德克里夫图书馆
  • 办公费抵扣标准
  • vue3生命周期及使用
  • open是什么含义
  • 技术服务行业增值税税税负率是多少
  • 小规模纳税人应交税费会计分录
  • 劳务费发票怎么入账
  • 织梦cms要钱吗
  • 出租厂房会计分录怎么写
  • 城建税小规模纳税人
  • 装修增值税税率是多少2022
  • 劳务费走应付职工薪酬
  • sqlyog与mysql
  • 增值税中进项税额转出是什么意思
  • 哪些合同不需要缴纳印花税的通知
  • 所得税 补缴
  • 出口退税进项票跨月勾选
  • 企业垃圾桶
  • 员工垫付的费用怎样记账
  • 领用材料属于什么会计分录
  • 营业执照代办需要什么手续
  • MySQL利用命令行工具启动和关闭的命令是什么
  • linux 的ll
  • uefi硬盘安装win10
  • hkcmd.exe损坏文件
  • 为什么windows删除文件很慢
  • 电脑网页字体设置
  • 系统恢复会怎么样
  • mac的mail登不上
  • Linux内核级别的资源隔离机制是
  • 退出清理磁盘
  • unity预处理命令
  • bootstrap怎么用
  • Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
  • angular创建项目命令
  • jQuery中trigger()与bind()用法分析
  • js判断ua
  • [置顶]星陨计划
  • 浅析jQuery Ajax请求参数和返回数据的处理
  • 税务举报偷税漏税电话
  • 开展和组织开展什么区别
  • 一般纳税人开红字发票怎么报税
  • 税控盘抵税申报表怎么填
  • 个人养老金没有开立资金账户
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设