Skip to content
wulin edited this page Jul 18, 2016 · 15 revisions

腾讯云&慧科合作 Node 课程系列 - 项目7

###本仓库为 Node 课程系列「项目 7」源码。包含以下功能完整实现:

  1. 增加安全验证机制,通过Basic Authentication才能访问所有的API
  2. 部署API Gateway服务,访问项目4、5所有的API

知识

本项目假设开发者已经了解以下基础知识,项目开展过程中这些知识不再讲解:

代码结构:

  • config/authConfig.js 授权用户名单配置
  • config/proxyConfig.js 转发服务器信息配置
  • middlewares/basicAuth.js 授权验证处理
  • routes/index.js 路由配置
  • package.json 项目配置文件
  • server.js 请求处理

云资源

本项目使用到的云资源包括:

  1. 腾讯云 CVM 1 台
  2.  腾讯云[注册域名](https://domains.qcloud.com/)一个,用于部署应用到外网。
    

开发过程

  1. Basic Auth
  2. 请求转发

##实践经验

  • 把不同的请求路由到不同的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模式,重新定义请求的方式即可。

Clone this wiki locally