-
Notifications
You must be signed in to change notification settings - Fork 0
Home
wulin edited this page Jul 18, 2016
·
15 revisions
###本仓库为 Node 课程系列「项目 7」源码。包含以下功能完整实现:
- 增加安全验证机制,通过Basic Authentication才能访问所有的API
- 部署API Gateway服务,访问项目4、5所有的API
本项目假设开发者已经了解以下基础知识,项目开展过程中这些知识不再讲解:
代码结构:
- config/authConfig.js 授权用户名单配置
- config/proxyConfig.js 转发服务器信息配置
- middlewares/basicAuth.js 授权验证处理
- routes/index.js 路由配置
- package.json 项目配置文件
- server.js 请求处理
本项目使用到的云资源包括:
- 腾讯云 CVM 1 台
-
腾讯云[注册域名](https://domains.qcloud.com/)一个,用于部署应用到外网。
##实践经验
- 把不同的请求路由到不同的IP或DNS上,需要考虑不同的请求类型;
- 在不确定请求类型时,可以使用epxress的use()方法进行路由处理;
- 在做转发请求时,不能使用bodyParser等中间件,这些中间件会改变req的初始结构,造成数据流的改变,再使用pipe方法就不能把数据完好的传输,会出现丢失请求数据的情况;
- 在request(https://github.com/request/request) 模块中,可以使用pipe方法进行数据流传输到一个请求中。它可以把method/headers/entity-body data一起传输给下一个请求;
- 若不使用pipe方法进行数据流传输,在处理post发送的数据时会带来不小的复杂性(如处理post上传的文件时,需要获取上传的文件,并重新设置请求headers中的content-type:multipart/form-data,再添加上一个boundary,然后将获取的临时文件数据转发给目标路由),需要具体判断传输的数据类型,并取得相应的数据随后进行转发,而不同的数据类型需要经过不同的方式获取;
- 如果针对不同的发送数据类型及请求方式进行特殊处理,写出来的代码不是优雅,不如使用pipe,只需根据RESTful模式,重新定义请求的方式即可。