位置: 编程技术 - 正文

实现一个完整的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使用视频教程)

  • 个税申报表中本期收入怎么填
  • 账面价值大于计税基础是什么差异
  • 价外费用纳税义务发生时间
  • 建设单位施工现场补助
  • 合并报表会计未分配利润怎么填写?
  • 个人所得税申报是公司申报还是个人申报
  • 税务报表的利润表
  • 企业所得税资产总额怎么填写
  • 净利润为什么要减折旧
  • 职工的补助金需交税吗
  • 装修未付款的会计分录
  • 股东拿不到钱
  • 专用增值税发票怎么作废
  • 房地产企业汇算清缴政策解析
  • 营业额和营业收入怎么填写
  • 企业筹建期发生的广告宣传费怎么抵减所得税
  • 资产负债表里面的应收账款包括哪些
  • 跨年怎么冲销发票
  • 模具成本怎么核算
  • 电脑网页播放视频只有声音没有画面
  • 微信聊天记录备份和恢复
  • 发票金额大于报销金额违法吗
  • 如何免费获得microsoft
  • 外汇收入情况说明
  • 材料费可抵扣进项税计算
  • 销售返利计入什么费用
  • php stat
  • 企业购进的商品又赠送给客户,怎么做分录呀
  • 技术服务转包涉税处理
  • 小规模纳税人上月发票开错了怎么办
  • 生育津贴减去应发工资还是实发工资
  • 采购的技术服务费会计分录
  • 公司之间往来款需要交税吗
  • 纳税申报的流程表
  • 增值税一般纳税人企业对同属于增值税
  • sql2008还原到2012
  • 股东滥用股东权利
  • 什么叫政府补贴学位生
  • 提取法定盈余公积会影响留存收益吗
  • 对公转账房租如何填写备注
  • 提取备用金记账凭证号的入账范围
  • 电梯折旧费计算方法
  • 建筑业异地预缴税款怎么纳税申报
  • 会计中劳保用品是什么
  • 房屋租赁费可以加计扣除吗
  • 2018年小规模纳税人
  • 房产税怎么实行
  • 避税唯一安全的方法
  • 其他公司归还借款分录
  • 走逃失联企业管理办法
  • 固定资产报废会议纪要模板
  • 公司差旅费报销标准表
  • 电子承兑被拒付(可拒付追索)
  • 如何开发票?
  • 建筑行业预收账款预缴税
  • 新成立的公司需要年检吗
  • sql server内存怎么设置合理
  • fedora31安装教程
  • win7系统摄像头打不开
  • vmware 错误
  • win10系统如何清洗打印机喷头
  • win10正版授权图标
  • linux cr3
  • opengl
  • setcontentview报错
  • linux基本命令的使用方法
  • 局域网远程开机与远程唤醒
  • js动态改变div内容
  • jQuery中ajax错误调试分析
  • JavaScript数据类的特点
  • jquery 字符串
  • jquery生成元素
  • 推荐javascript教程
  • python批量填表
  • js类的静态属性
  • 税收和社保不在同一地缴纳怎么办
  • 基层税务所工作现状
  • 卖废铁分录
  • 昆山华润燃气多少钱一方
  • 超豪华小汽车需要在什么环节纳税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设