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.