{"id":24537466,"url":"https://github.com/paraself/leancloud-node-ts","last_synced_at":"2025-09-10T10:33:28.195Z","repository":{"id":47070886,"uuid":"193124362","full_name":"paraself/leancloud-node-ts","owner":"paraself","description":"LeanCloud Node Typescript 示例项目","archived":false,"fork":false,"pushed_at":"2022-12-10T19:48:37.000Z","size":638,"stargazers_count":6,"open_issues_count":12,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T13:21:36.655Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paraself.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-21T15:49:16.000Z","updated_at":"2024-05-21T05:34:41.000Z","dependencies_parsed_at":"2023-01-26T08:15:51.367Z","dependency_job_id":null,"html_url":"https://github.com/paraself/leancloud-node-ts","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraself%2Fleancloud-node-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraself%2Fleancloud-node-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraself%2Fleancloud-node-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraself%2Fleancloud-node-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paraself","download_url":"https://codeload.github.com/paraself/leancloud-node-ts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248989094,"owners_count":21194527,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-22T14:12:45.771Z","updated_at":"2025-04-15T01:31:18.103Z","avatar_url":"https://github.com/paraself.png","language":"TypeScript","readme":"# LeanCloud Node TypeScript 示例项目\n\n帮助大家快速在LeanCloud的云引擎上构建起TypeScript的开发环境\n\n\n\n### 已经支持的特性 ###\n\n**1. 默认express框架**\n\n**2. cors跨域请求配置**\n\n通过`cors`模块实现，在`app.ts`文件中配置跨域。\n\n``` ts\n// 在这里开启cors跨域设置，设置自己的域名白名单，和需要跨域的方法\napp.use(cors({\n  // origin: [\n  //   'http://localhost:52153'\n  // ],\n  // methods: ['POST', 'OPTIONS', 'GET']\n}))\n```\n\n**3. helmet安全防护**\n\n通过`helmet`模块实现\n\n**4. 客户端ip获取**\n\n通过`request-ip`实现，具体用法：\n``` ts\napp.use(function(req, res) {\n  const ip = req.clientIp;\n  res.end(ip);\n});\n```\n**5. sourcemap支持**\n\n通过`source-map-support`模块实现\n\n**6. xss攻击防范**\n\n通过`xss-clean`实现\n\n\n\n### 增强特性 ###\n\n本仓库只提供基本的云引擎TS环境的搭建。相对于[官方提供的云引擎开发方式](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html), 我们通过另外一个仓库[leancloud-cloud-decorator](https://github.com/paraself/leancloud-cloud-decorator)提供了更丰富的增强特性：\n\n- [x] 云函数集成redis缓存\n\n  可以将一些对数据实时性不敏感的接口内容，缓存在redis中，当前端访问云函数的时候，直接读取redis里的内容，加快访问速度。例如，1小时更新一次的排行榜。通过安装[leancloud-cloud-decorator](https://github.com/paraself/leancloud-cloud-decorator)来实现。\n\n- [x] 云函数参数校验\n\n  接口参数校验，或者云函数参数校验，是业务中很重要的一块，可以有效杜绝前端传入的数据不规范，恶意的接口参数碰撞等行为。通过将`joi`集成到云函数装饰器中，实现该特性。\n\n- [x] 云函数发布前端SDK\n\n  后端在云函数创建的时候定义好参数以及返回值类型之后，可以一键将类型以及API wrapper代码，发布成前端环境可用的SDK。这样前端就可以在使用云函数API SDK的时候，通过VSCode的代码提示，清楚的知道接口的参数含义，以及接口返回值的schema。目前支持web/小程序/dart。\n\n- [x] 云函数限流、防抖\n\n  对于一些Post类的云函数，可以设定在Post没有结束的时候进行防抖。同时针对一些敏感云函数，可以设置限流。\n\n\n\n### 其他计划中的特性 ###\n\n现有的工作流程其实有很多还可以改进的地方，我们会在实践中持续提出新的想法：\n\n- [ ] 数据库ORM\n\n  LC在利用SDK操作数据库的时候，失去了数据库的字段类型。我们通过ORM组件，利用[数据schema的接口](https://tab.leancloud.cn/docs/rest_api.html#hash-1422845360)，可以预先生成全部数据库字段的TS interfaces，并创建出对应的Class。并在其中加入一层redis缓存。这样可以将对一致性要求比较低的数据，先操作缓存层，然后再以特定的周期，或者特定的事件，比如redis key过期，再写入脏数据到数据库，能够有效降低数据库的API访问次数。（目前已经写完，已在内部使用，还需要持续优化才能开箱即用）\n\n- [ ] 可视化编程\n\n  可以将路由以组件的形式进行可视化拼装，以实现用户常见的微信支付，支付宝支付，海报生成，小程序客户接口，带参转发，语音识别等功能\n\n- [ ] 云引擎风控系统\n\n  一个轻量化的云引擎风险识别+风险解决框架。已在内部使用。\n\n- [ ] 云引擎监控系统\n\n  已在内部使用\n\n\n\n### 使用步骤 ###\n\n1. 确保已经安装了[Lean Cli命令行工具](https://leancloud.cn/docs/leanengine_cli.html)\n2. 先下载本仓库，或者fork到本地\n3. 在命令行终端里，进入本项目的文件夹，执行```lean switch```命令，切换到自己的云引擎实例\n4. 执行```npm i```安装项目依赖，项目已经配置了cnpm作为安装源，因此无需使用cnpm命令\n5. 运行```lean up```即可打开本地服务器进行调试\n6. 调试方法和一般的LC的云引擎NodeJS应用是一样的。访问```localhost:3001```进行云函数调试；访问```localhost:3000```路由到云引擎根路由上\n7. 可以使用`lean deploy`进行部署，也可以使用源码部署\n\n其他使用方法请参考[LeanCloud的云引擎开发指南](https://leancloud.cn/docs/leanengine_quickstart.html)\n\n\n\n### Node版本 ###\n\n目前使用的是[NodeJS 12.17.x LTS版](https://nodejs.org/en/)。如需使用其他版本的NodeJS，请修改`package.json`里的`engine`键。\n``` json\n\"engines\": {\n  \"node\": \"12.17.x\",\n  \"npm\": \"6.x\"\n}\n```\n以及安装对应版本的`@types/node`模块。\n\n### FAQ ###\n\n**1. 为什么把`@types/xxxx`安装到了生产依赖？**\n\n因为LeanCloud在构建的时候，只安装生产依赖，不安装开发依赖。而构建的时候，需要使用一些来自`@types/xxx`里的类型。\n\n**2. 如何安装私有模块**\n  \n私有模块一般需要设置项目根目录下的`.npmrc`文件，在里面配置私有registry，形式如下。\n``` yml\n//registry.npmjs.org/:_authToken=${NPM_TOKEN}\n```\n其中`NPM_TOKEN`是一个环境变量，如果用的是官方NPM私有模块的话，可以在NPM官网里的tokens设置，生成一个专用的云引擎构建用的token。如果是其他的私有源，生成TOKEN这里的原理类似。把这个token设置到云引擎的控制台里的环境变量设置中。然后关键的一步是，需要在项目的根目录下，放一个`leanengine.yaml`，里面加上:\n``` yml\nexposeEnvironmentsOnBuild: true\n```\n这样，云引擎在构建的时候，就可以拿到环境变量了。私有依赖就都可以装上了。","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparaself%2Fleancloud-node-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparaself%2Fleancloud-node-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparaself%2Fleancloud-node-ts/lists"}