位置: 编程技术 - 正文

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

  • 税控盘是干什么用的
  • 劳务费税率计算公式
  • 中国注册税务师协会官网
  • 减资 股东
  • 农产品开具发票税率是多少
  • 企业所得税季初和季末
  • 车辆租赁发票税点
  • 申报时入库税款怎么入账
  • 现金日记账划线更正法
  • 工程保险费属于企业管理费吗
  • 商业企业购货分录
  • 你如何界定成本与费用之间区别?
  • 代理销售保险
  • 完全发生在境外的服务增值税
  • 国税的应交税款在地税的财务报表上怎么填?
  • 电梯安装简易征收的优点
  • 公务用车用油
  • 劳务服务公司业务范围
  • 房地产企业什么时候交企业所得税
  • 个人独资企业股权转让要交什么税
  • 投入资本公积需要结转吗
  • 个税是应发工资扣,还是实发工资扣
  • 个人独资企业还是个体户好
  • 红色手撕发票怎么看金额
  • 如何在excel中添加多行空白
  • 呆账催讨原则是谁提出的
  • 工厂的绿化费进项税额
  • 公司外币账户怎么登录
  • 股权出售是利空还是利好
  • wordpress主题dux
  • 销项负数发票应该给谁
  • php框架的作用
  • 加工费入什么会计科目
  • 结存材料实际成本例题
  • b250主板最好的cpu是哪一款
  • 推荐一款免费的vba编辑器
  • php接口规则
  • php加密后怎么运行
  • 出差补贴如何入账报销
  • 怎么计算土地增值税金额
  • 固定资产加速折旧方法
  • vue中解决跨域问题
  • 研发支出属于什么类科目
  • 发票认证的目的和意义
  • 公司主营业务和经营范围的区别
  • 理财利息可以计息吗
  • 帝国cms插件编写教程
  • 填写记账凭证的日期一般是会计人员填制记账凭证的
  • 小企业销售折让与销售退回发生时如何处理
  • SqlServer 2005/2008数据库被标记为“可疑”的解决办法
  • 企业所得税多预缴了怎么办
  • 通信服务费账务处理流程
  • 跨年发生退货税务处理
  • 简易征收 简易计税
  • 简易计税方法缴纳城建税和教育税
  • 预付工程款该怎么记账
  • 新成立的教育机构值得去吗
  • 抵扣认证的发票怎么做账
  • 会计人员基本信息表去哪找
  • 现金流量结构分析表
  • 美国支票上的收款人地址不对怎么办
  • 私人企业会计工作内容
  • 浅谈幼儿良好行为的培养论文
  • windows xp死亡倒计时
  • Win10 mobile 10586.107升级后会出现哪些bug?
  • linux跨服务器调用shell脚本
  • python生成器详解
  • javaScript事件机制兼容【详细整理】
  • vue中父子组件如何通信的
  • jquery单击事件和双击事件
  • 上海电子税务局怎么添加办税员
  • 青海国家税务局总局官网
  • 江苏发票真伪查询网站
  • 补缴印花税分录
  • 土地使用税2023征收标准
  • 扬帆把舵怎么读
  • 地税税务登记代码怎么查
  • 乌鲁木齐交通服务电话
  • 小规模纳税人的增值税怎么计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设