nodeJS+swagger部署描述REST接口实战
2018-02-08 14:41
501 查看
主要章节
搭建nodeJS+swaggerUI环境
自定义接口描述文件并使用
解决跨域问题
2、新建一个空目录;
3、在目录下执行【npm init】,然后一路回车即可;
4、最后执行【npm install express –save】即可完成对express的安装。
2、将swagger目录dist下文件尽数拷贝到public目录下。
2、通过浏览器访问【http://ip:8002/v1/api】即可以访问到swagger官方的API demo UI。
接下来我们采用自定义接口描述文件swagger.json替换官方demo。
https://swagger.io/docs/specification/2-0/describing-request-body/
使用swagger edit在线编辑器编辑:
https://editor.swagger.io/
这部分可以通过yaml语法编辑,完成后选择保存为json文件swagger.json.
2、打开public/index.html,将其中的【url: “…”】更换为【url: “swagger.json”】;
3、重新【node index.js】,然后打开浏览器即可看到类似如下的页面:
![](https://img-blog.csdn.net/20180208140235533?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnJlZWJveTEyMzQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
加载成功。
4、上图右下角有个错误,是无法是被swagger.json为url所致,解决办法是:打开public/index.html,在【url: “…”】同级添加【validatorUrl: false】即可。
但是当具体点击某一个接口并进行【Try it】的时候,你会发现并没有成功,调出浏览器调试页面后,你会发现是跨域问题。
这是因为,swagger是纯粹的前端,它并没有后台的支持,所有界面上接口的请求都是直接由ajax发起,而此时你的服务端获取并不支持跨域,所以便出现了跨域的问题。
解决方案有两种:
有兴趣的同学可以研究一下。
而对于put、delete请求来说,当你【Try it】测试接口的时候,打开浏览器调试界面,可以发现其发送的是options请求,而查看服务端日志,收到的也是options请求。原来put、delete请求在发送之前首先会发送一次options请求,用来验证服务端是否支持跨域等操作。
处于这种情况,需要在服务端为这类请求添加options请求处理方法,并应swagger添加以下部分的东西后,测试成功。
欢迎留言交流!!
搭建nodeJS+swaggerUI环境
自定义接口描述文件并使用
解决跨域问题
搭建nodeJS+swaggerUI环境
1、下载swaggerUI代码
git clone https://github.com/swagger-api/swagger-ui.git2、安装express
1、安装nodeJS;2、新建一个空目录;
3、在目录下执行【npm init】,然后一路回车即可;
4、最后执行【npm install express –save】即可完成对express的安装。
3、添加swagger官方demo
1、在目录下新建public目录;2、将swagger目录dist下文件尽数拷贝到public目录下。
4、编写nodeJS启动脚本
新建index.js并在其中编写如下代码:var express = require('express'); var app = express(); app.use('/v1/api', express.static('public')); app.use('/', function(req, res){ res.write('You maybe access /v1/api'); res.end(); }); var server = app.listen(8002, function (){ console.log('Example app listening on port 8002!'); }); // 设置服务永不超时 server.setTimeout(0)
5、启动swaggerUI
1、执行命令【node index.js】即完成对swagger的启动;2、通过浏览器访问【http://ip:8002/v1/api】即可以访问到swagger官方的API demo UI。
接下来我们采用自定义接口描述文件swagger.json替换官方demo。
自定义接口描述文件并使用
1、编写接口描述文件swagger.json
描述文件编写规则见:https://swagger.io/docs/specification/2-0/describing-request-body/
使用swagger edit在线编辑器编辑:
https://editor.swagger.io/
这部分可以通过yaml语法编辑,完成后选择保存为json文件swagger.json.
2、使用swagger.json替换官方demo
1、将编写完成swagger.json放入public目录;2、打开public/index.html,将其中的【url: “…”】更换为【url: “swagger.json”】;
3、重新【node index.js】,然后打开浏览器即可看到类似如下的页面:
加载成功。
4、上图右下角有个错误,是无法是被swagger.json为url所致,解决办法是:打开public/index.html,在【url: “…”】同级添加【validatorUrl: false】即可。
解决跨域问题
完成以上步骤以后,你所自定义的接口即可通过swaggerUI的方式展示在人面前,便于查看。但是当具体点击某一个接口并进行【Try it】的时候,你会发现并没有成功,调出浏览器调试页面后,你会发现是跨域问题。
这是因为,swagger是纯粹的前端,它并没有后台的支持,所有界面上接口的请求都是直接由ajax发起,而此时你的服务端获取并不支持跨域,所以便出现了跨域的问题。
解决方案有两种:
1、拦截swaggerUI的请求,统一由nodeJS做转发
由于需要涉及swaggerUI源码的东西,对我不适用,故放弃。有兴趣的同学可以研究一下。
2、在服务端添加支持跨域请求的代码
对于get、post请求,是直接发送的具体请求的,在返回头添加(’Access-Control-Allow-Origin’, ‘*’)即可:response.headers['Access-Control-Allow-Origin'] = '*'
而对于put、delete请求来说,当你【Try it】测试接口的时候,打开浏览器调试界面,可以发现其发送的是options请求,而查看服务端日志,收到的也是options请求。原来put、delete请求在发送之前首先会发送一次options请求,用来验证服务端是否支持跨域等操作。
处于这种情况,需要在服务端为这类请求添加options请求处理方法,并应swagger添加以下部分的东西后,测试成功。
response.headers['Access-Control-Allow-Origin'] = '*' accessMethod = 'GET, POST, DELETE, PUT, PATCH, OPTIONS' response.headers['Access-Control-Allow-Methods'] = accessMethod accessHeaders = 'Content-Type, api_key, Authorization' response.headers['Access-Control-Allow-Headers'] = accessHeaders
本人邮箱:
zhao.yj@yahoo.com欢迎留言交流!!
相关文章推荐
- Node.js 切近实战(十二) 之Linux部署
- Node.js项目实战-构建可扩展的Web应用(第一版):11 部署Node.js应用
- 【《Node.js 实战》学习思维导图】第12章 部署Node程序并维持正常运行时间
- Node.js项目实战-构建可扩展的Web应用(第一版):8 使用Express.js和Hapi构建Node.js REST API服务
- Node.js 切近实战(十二) 之Linux部署
- 一个使用了nodejs+express的简单jsonp接口模拟脚本
- 【Node.js 微信公众号实战】2.Node.js access_token的获取、存储及更新
- 基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
- ubuntu16.04下用laradock部署nodejs+laravel前后端环境
- 解决sublime部署Node.js开发环境中出现[Decode error - output not utf-8]错误
- IT营Koa2教程_Koa2+Nodejs+MongoDb打造企业级CMS前后端全栈项目实战视频教程(大地)
- 使用swagger作为restful api的doc文档生成——从源码中去提取restful URL接口描述文档
- 签到APP:android入门级小项目,Node.js 提供服务端接口。
- swagger + spring mvc 实现rest 接口代码与api 同步维护,更新
- ubuntu14.04下nodejs + npm + bower的安装、调试和部署
- CentOS 7部署Node.js+MongoDB:在VPS上从安装到Hello world
- Node.js 切近实战(七) 之Excel在线(文件&文件组)
- 华为云centos7上部署node.js应用,部署redis和mysql,使用forever守护node.js进程
- 阿里云ECS部署node.js及防火墙80端口开启
- Node.js实战:建立简单的Web服务器