位置: 编程技术 - 正文

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

  • 老项目增值税简易计税
  • 个人写的收据要留身份证复印件吗
  • 水利建设专项收入的税率是多少?
  • 文化建设税怎么填
  • 摊销广告费会计分录
  • 劳务派遣代发工资开票
  • 政府补助具有无偿性的特征
  • 出租屋物品损坏怎么赔偿
  • 一般纳税人17%增值税发票按12%核算如何进行账务处理?
  • 香港公司在大陆设立子公司
  • 承接所有业务
  • 租入房产改建增值税谁交
  • 营业执照印花税减免政策
  • 企业自建房是什么意思
  • 税局定额的标准
  • 企业固定资产损失包括
  • 增值税的特殊销售方式有哪些?税务处理时怎样的?
  • 纳税人不得汇总开具发票
  • 安装费的税费的会计分录
  • 企业借款利息收入企业所得税
  • 复核内容有哪些?
  • 任务栏没反应怎么重启
  • 电脑前面板耳机没声音怎么设置bios
  • php 缓存
  • php基础入门教程
  • 进口付汇业务流程
  • 如何理解什么是社会制度
  • 来料加工企业转型是转成两个企业吗
  • php 银行卡支付
  • 固定资产加速折旧最新政策2022
  • gridviewcolumn
  • python快速检索
  • php curl cookie
  • 人民币跨境贸易占比
  • 合并报表少数股东权益抵消分录
  • 季度做账是什么意思
  • 帝国cms8.0
  • 在dedecms中,如何模板建站
  • mysql使用指南
  • curl抓包
  • 股东投资款超过实收资本怎么处理
  • 企业卖地收入会计处理
  • 新开公司怎么办理税务登记
  • SQL SERVER 2000通讯管道后复用劫持
  • 会计人员未参加继续教育
  • 短期借款的账务处理例题
  • 商业汇票贴现条件有哪些
  • 一般纳税人增值税怎么做账务处理
  • 存货盘亏有哪些情况
  • 一般哪些收据可以抵扣
  • 收到银行承兑汇票后,如何取钱
  • 以前年度少计提的工资怎么处理
  • 各大银行网银转账限额
  • 其他贷款服务计入什么科目
  • 2021年财务报表申报
  • 承租人和共同承租人
  • 跨月普票作废怎么处理操作步骤
  • 普通发票的税费怎么算
  • 费用报销银行转账用途怎么写
  • 明细分类账三栏式
  • 自助回单打印和网银回单
  • 税务登记证办理流程
  • win7找回删除的文件
  • office进程
  • neotrace.exe - neotrace是什么进程 有什么用
  • windows10x预览版
  • 搭建android开发环境时为什么要先安装jdk
  • Python判断字符串结尾并输出yes或no
  • unity做安卓app
  • android 一个绚丽的loading动效分析与实现!
  • Android studio配置环境
  • angular const
  • js怎么学扎实
  • 客户端脚本错误怎么解决
  • 两个fragment之间传值
  • jquery自带的弹出框
  • 深两优3117审定号
  • 天津环保网站官网
  • 先进单位表彰发言稿
  • 残疾人个体工商户补贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设