Structure

In the Quick Start, we should have a preliminary impression on the framework, next let us simply understand the directory convention specification.

egg-project
├── package.json
├── app.js (optional)
├── agent.js (optional)
├── app
| ├── router.js
│ ├── controller
│ | └── home.js
│ ├── service (optional)
│ | └── user.js
│ ├── middleware (optional)
│ | └── response_time.js
│ ├── schedule (optional)
│ | └── my_task.js
│ ├── public (optional)
│ | └── reset.css
│ ├── view (optional)
│ | └── home.tpl
│ └── extend (optional)
│ ├── helper.js (optional)
│ ├── request.js (optional)
│ ├── response.js (optional)
│ ├── context.js (optional)
│ ├── application.js (optional)
│ └── agent.js (optional)
├── config
| ├── plugin.js
| ├── config.default.js
│ ├── config.prod.js
| ├── config.test.js (optional)
| ├── config.local.js (optional)
| └── config.unittest.js (optional)
└── test
├── middleware
| └── response_time.test.js
└── controller
└── home.test.js

As above, directories by conventions of framework:

  • app/router.js used to configure URL routing rules, see Router for details.
  • app/controller/** used to parse the input from user, return the corresponding results after processing, see Controller for details.
  • app/service/** used for business logic layer, optional, recommend to use,see Service for details.
  • app/middleware/** uesd for middleware, optional, see Middleware for details.
  • app/public/** used to place static resources, optional, see built-in plugin egg-static for details.
  • app/extend/** used for extensions of the framework, optional, see Extend EGG for details.
  • config/config.{env}.js used to write configuration files, see Configuration for details.
  • config/plugin.js used to configure the plugins that need to be loaded, see Plugin for details.
  • test/** used for unit test, see Unit Test for details.
  • app.js and agent.js are used to customize the initialization works at startup, see Application Startup Configuration for details. For the role of agent.js see Agent Mechanism.

Directories by conventions of built-in plugins:

  • app/public/** used to place static resources, optional, see built-in plugin egg-static for details.
  • app/schedule/** used for scheduled tasks, optional, see Scheduled Task for details.

To customize your own directory specification, see Loader API

  • app/view/** used to place view files, optional, by view plugins conventions, see View Rendering for details.
  • app/model/** used to place the domain model, optional, by the domain related plugins conventions, such as egg-sequelize.