本文介绍了egg.js入门的相关内容,包括Egg.js的基本概念、安装过程以及如何创建和配置第一个Egg.js应用。通过阅读,你可以快速了解Egg.js框架并开始构建Web应用。
Egg.js简介与安装Egg.js是一个基于Koa的Node.js框架,由阿里巴巴开源。它旨在提供一个高性能、易于扩展的Web应用开发环境。Egg.js的核心设计理念是通过约定优于配置,使得开发者可以快速地搭建起一个稳定且可维护的Web应用。
安装Node.js
首先,需要安装Node.js。访问Node.js官方网站下载最新版本的Node.js并安装。安装完成后,可以通过命令行检查Node.js是否安装成功:
node -v npm -v
这会显示Node.js和npm的版本信息。
安装egg CLI
接下来,安装Egg.js的命令行工具egg-init
,它可以帮助我们快速创建新的Egg.js项目。
npm install egg-init -g
安装完成后,可以通过命令行检查egg-init
是否安装成功:
egg-init -v
安装Egg.js框架
安装Egg.js框架本身:
npm install egg -g
使用egg-init
命令来初始化一个新的Egg.js项目。这里以创建一个名为my-egg-app
的项目为例:
egg-init my-egg-app cd my- Egg-app
进入项目目录后,运行以下命令安装项目依赖:
npm install
启动应用的命令是egg
。运行以下命令启动应用:
npm run dev
在浏览器或终端中访问http://localhost:7001/
,你会看到应用的默认主页。这是一个简单的欢迎页面,表示应用已经成功启动并运行。
Egg.js项目的目录结构如下:
my-egg-app/ ├── app/ │ ├── controller/ │ ├── agent/ │ ├── middleware/ │ ├── router.js │ ├── config/ │ │ ├── default.js │ │ ├── security.js │ │ ├── view.js │ │ └── ... │ └── ... ├── config/ │ ├── config.default.js │ ├── config.local.js │ └── ... ├── package.json └── ...
app/
:这是应用的主要目录,包括控制器、中间件、路由等。config/
:存放配置文件,包括默认配置、本地配置等。package.json
:项目的配置文件,包括依赖、脚本等。Egg.js的配置文件主要位于config/
目录下:
config.default.js
:项目默认配置文件。config.local.js
:本地开发环境的配置文件,可以根据需要进行修改。config.<env>.js
:针对特定环境的配置文件,例如config.prod.js
用于生产环境。config.default.js
// config/default.js module.exports = { // 配置数据库连接 sequelize: { dialect: 'mysql', host: '127.0.0.1', port: 3306, user: 'root', password: 'password', database: 'mydb' }, // 配置中间件 middlewares: [ 'error', 'cors', 'bodyParser', 'responseTime', 'router', 'throttle', 'compress', 'gzip' ] };
Egg.js支持多环境配置,可以在不同的环境中使用不同的配置文件,例如:
config.local.js
:本地开发环境的配置。config.prod.js
:生产环境的配置。设置环境变量NODE_ENV
:
export NODE_ENV=prod
或在package.json
中定义启动脚本:
{ "scripts": { "start": "NODE_ENV=prod node app.js" } }路由与控制器
路由规则定义了URL和处理请求的控制器之间的映射关系。路由配置位于app/router.js
文件中。
// app/router.js module.exports = function(app) { const { router, controller } = app; router.get('/', controller.home.index); router.post('/user', controller.user.create); router.put('/user/:id', controller.user.update); };
控制器位于app/controller/
目录下,用于处理路由请求。
// app/controller/home.js const Controller = require('egg').Controller; class HomeController extends Controller { async index() { this.ctx.body = 'Hello World'; } } module.exports = HomeController;
在控制器中,可以使用this.ctx
来访问请求和响应对象。
// app/controller/user.js const Controller = require('egg').Controller; class UserController extends Controller { async create() { const { ctx } = this; const user = ctx.request.body; ctx.body = { success: true, user }; } async update() { const { ctx } = this; const id = ctx.params.id; const user = ctx.request.body; ctx.body = { success: true, user, id }; } } module.exports = UserController;模板与视图
Egg.js支持多种模板引擎,如Nunjucks、Handlebars等。默认使用Nunjucks。
npm install egg-view-nunjucks --save
然后在config/config.default.js
中启用模板引擎:
module.exports = { view: { defaultViewEngine: 'nunjucks', defaultExtension: '.html', }, };
在控制器中使用this.ctx.renderView
方法渲染视图。
// app/controller/home.js const Controller = require('egg').Controller; class HomeController extends Controller { async index() { const { ctx } = this; ctx.body = await ctx.render('index.html'); } }
// app/controller/home.js async index() { const { ctx } = this; ctx.body = await ctx.render('index.html', { title: 'Home Page', message: 'Welcome to our home page', }); }
在Nunjucks中,可以使用extends
关键字创建基础布局文件。
<!-- views/layout.html --> <!DOCTYPE html> <html> <head> <title>{{ title }}</title> </head> <body> <header> <h1>My Website</h1> </header> <main> {% block content %}{% endblock %} </main> </body> </html>
在具体的视图文件中,继承基础布局:
<!-- views/index.html --> {% extends "layout.html" %} {% block content %} <p>{{ message }}</p> {% endblock %}
通过上述步骤和代码示例,你可以快速上手Egg.js框架,并构建一个简单的Web应用。