badboy-tian / leancloud-for-clear

LeanCloud Node Typescript 示例项目

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LeanCloud Node TypeScript 示例项目

帮助大家快速在LeanCloud的云引擎上构建起TypeScript的开发环境

已经支持的特性

1. 默认express框架

2. cors跨域请求配置

通过cors模块实现,在app.ts文件中配置跨域。

// 在这里开启cors跨域设置,设置自己的域名白名单,和需要跨域的方法
app.use(cors({
  // origin: [
  //   'http://localhost:52153'
  // ],
  // methods: ['POST', 'OPTIONS', 'GET']
}))

3. helmet安全防护

通过helmet模块实现

4. 客户端ip获取

通过request-ip实现,具体用法:

app.use(function(req, res) {
  const ip = req.clientIp;
  res.end(ip);
});

5. sourcemap支持

通过source-map-support模块实现

6. xss攻击防范

通过xss-clean实现

增强特性

本仓库只提供基本的云引擎TS环境的搭建。相对于官方提供的云引擎开发方式, 我们通过另外一个仓库leancloud-cloud-decorator提供了更丰富的增强特性:

  • 云函数集成redis缓存

    可以将一些对数据实时性不敏感的接口内容,缓存在redis中,当前端访问云函数的时候,直接读取redis里的内容,加快访问速度。例如,1小时更新一次的排行榜。通过安装leancloud-cloud-decorator来实现。

  • 云函数参数校验

    接口参数校验,或者云函数参数校验,是业务中很重要的一块,可以有效杜绝前端传入的数据不规范,恶意的接口参数碰撞等行为。通过将joi集成到云函数装饰器中,实现该特性。

  • 云函数发布前端SDK

    后端在云函数创建的时候定义好参数以及返回值类型之后,可以一键将类型以及API wrapper代码,发布成前端环境可用的SDK。这样前端就可以在使用云函数API SDK的时候,通过VSCode的代码提示,清楚的知道接口的参数含义,以及接口返回值的schema。目前支持web/小程序/dart。

  • 云函数限流、防抖

    对于一些Post类的云函数,可以设定在Post没有结束的时候进行防抖。同时针对一些敏感云函数,可以设置限流。

其他计划中的特性

现有的工作流程其实有很多还可以改进的地方,我们会在实践中持续提出新的想法:

  • 数据库ORM

    LC在利用SDK操作数据库的时候,失去了数据库的字段类型。我们通过ORM组件,利用数据schema的接口,可以预先生成全部数据库字段的TS interfaces,并创建出对应的Class。并在其中加入一层redis缓存。这样可以将对一致性要求比较低的数据,先操作缓存层,然后再以特定的周期,或者特定的事件,比如redis key过期,再写入脏数据到数据库,能够有效降低数据库的API访问次数。(目前已经写完,已在内部使用,还需要持续优化才能开箱即用)

  • 可视化编程

    可以将路由以组件的形式进行可视化拼装,以实现用户常见的微信支付,支付宝支付,海报生成,小程序客户接口,带参转发,语音识别等功能

  • 云引擎风控系统

    一个轻量化的云引擎风险识别+风险解决框架。已在内部使用。

  • 云引擎监控系统

    已在内部使用

使用步骤

  1. 确保已经安装了Lean Cli命令行工具
  2. 先下载本仓库,或者fork到本地
  3. 在命令行终端里,进入本项目的文件夹,执行lean switch命令,切换到自己的云引擎实例
  4. 执行npm i安装项目依赖,项目已经配置了cnpm作为安装源,因此无需使用cnpm命令
  5. 运行lean up即可打开本地服务器进行调试
  6. 调试方法和一般的LC的云引擎NodeJS应用是一样的。访问localhost:3001进行云函数调试;访问localhost:3000路由到云引擎根路由上
  7. 可以使用lean deploy进行部署,也可以使用源码部署

其他使用方法请参考LeanCloud的云引擎开发指南

Node版本

目前使用的是NodeJS 12.17.x LTS版。如需使用其他版本的NodeJS,请修改package.json里的engine键。

"engines": {
  "node": "12.17.x",
  "npm": "6.x"
}

以及安装对应版本的@types/node模块。

FAQ

1. 为什么把@types/xxxx安装到了生产依赖?

因为LeanCloud在构建的时候,只安装生产依赖,不安装开发依赖。而构建的时候,需要使用一些来自@types/xxx里的类型。

2. 如何安装私有模块

私有模块一般需要设置项目根目录下的.npmrc文件,在里面配置私有registry,形式如下。

//registry.npmjs.org/:_authToken=${NPM_TOKEN}

其中NPM_TOKEN是一个环境变量,如果用的是官方NPM私有模块的话,可以在NPM官网里的tokens设置,生成一个专用的云引擎构建用的token。如果是其他的私有源,生成TOKEN这里的原理类似。把这个token设置到云引擎的控制台里的环境变量设置中。然后关键的一步是,需要在项目的根目录下,放一个leanengine.yaml,里面加上:

exposeEnvironmentsOnBuild: true

这样,云引擎在构建的时候,就可以拿到环境变量了。私有依赖就都可以装上了。

About

LeanCloud Node Typescript 示例项目


Languages

Language:TypeScript 91.1%Language:JavaScript 8.9%