位置: 编程技术 - 正文

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

  • 免征增值税的会计处理 进项
  • 不征收增值税的有哪些
  • 个人转让著作权免税吗
  • 低值易耗品包含什么
  • 高新技术企业费用认定
  • 运输过程中的货损责任
  • 其他综合收益损失
  • 核定征收企业有利润如何注销税务登记
  • 事业单位已核销怎么处理
  • 少记财务费用如何记账
  • 免费送客户礼品的文案
  • 年度所得税汇算清缴表去哪里找
  • 城市建设维护税怎么计算
  • 建筑行业不管是什么行业
  • 税务局代增值税普通发票流程
  • 资本溢价公积金计算公式
  • 代收车船税是什么意思必须收吗
  • 母公司计提子公司投资收益
  • 增值税发票和电子发票都可以报销吗
  • 漏记的账务怎么处理
  • 物流公司运费账务处理
  • 如何下载网页?
  • 苹果哪些手机有120hz刷新率
  • 财务都干些什么
  • 其他收入工会经费计税依据
  • php __destruct
  • 认缴制注册资金不交可以吗
  • 车辆购置税税收缴款书
  • 收到小微企业贷款减息会计处理办法
  • 用人单位未为劳动者缴纳社会保险费
  • 结转未交增值税为什么是零
  • 对公打款打错了
  • 创建vue3项目的步骤
  • 土地扣除项目金额
  • python一元二次方程求根
  • el-form表单
  • 股权激励税务处理方案
  • 进项票和销项票是什么意思
  • 没有虚拟化iommu
  • 收据和发票有什么用
  • 合伙制律师事务所和个人律师事务所
  • 企业按季度交税
  • 建筑发票开具与土增税扣有什么关系?
  • 发票额开多了多出的金额怎么处理?
  • 固定资产处置怎么报税
  • 实收资本主要包括哪些
  • 接受代销货物的会计分录
  • 开房租租赁发票怎么记账?
  • 其他业务收入如何填写增值税申报表
  • 法人存入公司账户会计分录
  • mysql关联语句
  • mysql5.7.
  • Mac无法连接到iCloud
  • 在linux操作系统中,/etc/rc.d/init.d
  • freebsd版本选择
  • windows打不开添加打印机
  • linux系统检测
  • 安装fedora33
  • ubuntu系统升级 开机黑屏怎么解决
  • linux 压缩包zip
  • win10系统无法卸载补丁
  • linux wc命令如何实现
  • centos 删除恢复
  • Nodejs+express+html5 实现拖拽上传
  • cssid和class的区别
  • vue router routes
  • js格式化输出
  • 脸部两旁的骨头
  • three.js碰撞检测
  • nodejs实现文件下载
  • android自定义listview
  • 安卓开发例子
  • jQuery Easyui Tabs扩展根据自定义属性打开页签
  • js模拟点击alert()确定
  • javascript中Date format(js日期格式化)方法小结
  • 四川国家税务局官网
  • 保险发票属于什么类型发票
  • 湖南社保卡怎么网上缴费
  • 漳州市医保缴费标准
  • 贵州税务发票流向查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设