开始之前, 请先了解下Beidou的目录规范
. helloweb
├── package.json
├── app.js (可选)
├── agent.js (可选)
├── app (应用层代码目录)
| ├── router.js
│ ├── controller
│ │ └── home.js
| ├── extend (可选,对 Beidou.Application 的扩展)
│ | ├── helper.js (可选)
│ | ├── filter.js (可选)
│ | ├── request.js (可选)
│ | ├── response.js (可选)
│ | ├── context.js (可选)
│ | ├── application.js (可选)
│ | └── agent.js (可选)
│ ├── proxy (可选,由 hsf/tr 插件规范,建议统一为 proxy)
| ├── public (可选)
| | ├── favicon.ico
| | └── ...
│ ├── service (可选)
│ ├── middleware (可选)
│ │ └── response_time.js
│ ├── views (可选,由 view 插件规范,建议统一为 views)
| │ ├── layout.html
│ │ └── home.html
│ └── view-middlewares (自定义渲染中间件)
├── config (应用配置目录)
| ├── config.default.js
│ ├── config.prod.js
| ├── config.test.js (可选)
| ├── config.local.js (可选)
| ├── config.unittest.js (可选)
│ ├── plugin.js
│ └── role.js (可选,以 role 插件举例,插件特殊配置也放在 config 目录下)
├── client (客户端代码目录)
| ├── index.jsx
| └── page/index.jsx
└── test (测试目录)
├── middleware
| └── response_time.test.js
└── controller
└── home.test.js
app
目录是一个应用业务逻辑代码存放的地方,它是整个应用的 server 部分的核心目录。
app/router.js
app/router.js
是应用的路由配置文件,所有路由配置都在此设置, 放在同一个文件非常方便通过 url 查找到对应的 controller
代码。
app/controller
每个 app/controller/*.js
文件,都会被自动加载到 app.controller.*
上。 这样就能在 app/router.js
里面方便地进行路由配置。
在 controller 中可以调用 service,proxy 等依赖目录。
app/middleware
应用自定义中间件都放在此目录,然后需要在 config/config.js
配置中间件的启动顺序。
app/service
数据服务逻辑层抽象,如果你在多个 controller
中都写了一段类似代码去取相同的数据, 那就代表很可能需要将这个数据服务层代码重构提取出来,放到 app/service
下。
app/proxy
特别针对 RPC(hsf/tr) 的服务调用代码
public
静态资源目录
针对大部分应用,不需要将静态资源发布到 CDN 的场景,都可以将静态资源放到 app/public 目录下。
app/extend
在 extend
目录下都是对已有 API 进行扩展,也就是追加到 prototype 上,如 extend/application.js
是扩展 Application.prototype
app/views
存放模板文件和只在客户端使用的脚本目录文件。
用于在应用启动的时候做一些初始化工作,一般来说,大部分应用都是不需要此功能的。 如果一个应用使用了一些自定义服务客户端,那么需要做一些服务启动依赖检查的时候, 就可以通过 app.js
实现了。
和 app.js
类似,在 Agent Worker 进程中,如果需要做一些自定义处理,可以在这个文件中实现。
应用配置目录。规范中约定,web 框架根据环境加载配置,规则如下:
config/config.default.js
: 默认配置,所有环境都会加载此配置config/config.prod.js
: prod 环境配置config/config.local.js
: local 环境配置config/config.unittest.js
: 单元测试环境配置
同构代码目录,存放同构业务代码。
对React同构项目而言,client
目录用于存放 React 代码,包含组件、前端逻辑以及视图模版
单元测试目录