Egg.js项目实战:新手入门教程
本文将详细介绍如何从零开始搭建和运行一个Egg.js项目,并通过实战案例逐步深入讲解用户注册与登录功能的实现。此外,文章还将指导读者完成项目的打包、部署和监控,帮助读者全面掌握Egg.js项目实战。
Egg.js简介什么是Egg.js
Egg.js 是一个由阿里巴巴开源的基于 Koa 2 的框架,它借鉴和整合了 Express、Koa 和其他流行框架的优点,旨在提供一个高性能、可扩展和易于维护的 Node.js 应用开发框架。Egg.js 内置了多个核心功能,如路由、中间件、插件管理、日志、错误处理等,使得开发者可以专注于业务逻辑的实现。
Egg.js的优势
- 高性能:Egg.js 使用 Koa 2 作为底层引擎,Koa 2 本身基于 Node.js 的非阻塞 I/O 和事件驱动模型实现了高性能。
- 可扩展性:Egg.js 提供了丰富的插件系统,支持根据应用需求加载和卸载插件。这使得开发者可以灵活地对框架进行扩展,以满足复杂的应用场景。
- 易维护性:Egg.js 定义了清晰的项目结构,使得代码组织更加清晰。并且,Egg.js 提供了丰富的文档和社区支持,有助于开发者快速上手和解决问题。
- 生态丰富:Egg.js 拥有丰富的插件和第三方库,社区活跃,提供了大量的开发工具和资源,使开发过程更加高效。
Egg.js与Express的区别
- 底层引擎:Egg.js 使用 Koa 2 作为底层引擎,而 Express 使用 Connect 作为中间件支持。
- 中间件:Egg.js 使用 async/await 语法实现中间件,而 Express 使用回调函数。
- 插件支持:Egg.js 提供了更丰富的插件支持和管理机制,而 Express 的插件管理相对简单。
- 项目结构:Egg.js 有严格的项目结构要求,使得代码组织更加规范,而 Express 的项目结构相对灵活。
安装Node.js
安装 Node.js 是运行 Egg.js 项目的基础。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。首先,访问 Node.js 官方网站 https://nodejs.org/,下载最新版本的 Node.js 并安装。
安装完成后,可以通过以下命令验证 Node.js 是否安装成功:
$ node -v
安装成功后,终端会输出 Node.js 的版本号。
使用npm安装Egg.js
Node.js 安装完成后,可以使用 npm(Node Package Manager)来安装 Egg.js。Egg.js 作为一个 npm 包,可以通过 npm 安装到本地。
首先,确保已经安装了 npm。如果尚未安装,可以通过 Node.js 安装包一起安装。接下来,使用 npm 全局安装 Egg.js:
$ npm install -g egg-init
安装完成后,可以在命令行中使用 egg-init
命令来初始化一个新的 Egg.js 项目。
初次运行Egg.js项目
安装 Egg.js 后,可以使用 egg-init
命令生成一个新的 Egg.js 项目。例如,创建一个名为 my-app
的新项目:
$ egg-init my-app
这会生成一个基本的 Egg.js 项目结构。
接下来,进入项目目录并启动项目:
$ cd my-app
$ npm install
$ npm start
启动完成后,访问 http://localhost:7001
,可以看到默认的欢迎页面。
初始化Egg.js项目
创建一个新的 Egg.js 项目可以使用 egg-init
命令,如上文所述。以下是初始化一个名为 hello-world
的项目的示例:
$ egg-init hello-world
$ cd hello-world
$ npm install
项目结构解析
Egg.js 项目的目录结构通常如下:
hello-world/
├── app/
│ ├── config/
│ │ ├── default.js
│ │ └── local.js
│ ├── controller/
│ │ └── home.js
│ ├── router/
│ │ └── home.js
│ └── service/
├── config/
│ ├── config.default.js
│ └── config.local.js
├── package.json
└── README.md
app/
:包含应用的核心代码,如控制器、路由和中间件。app/config/
:包含应用的配置文件。app/controller/
:存放控制器文件,处理 HTTP 请求。app/router/
:存放路由文件,定义 URL 的映射关系。config/
:存放全局配置文件,如config.default.js
和config.local.js
。package.json
:项目配置文件,用于管理依赖。
例如,在 app/controller/home.js
文件中,可以定义一个简单的控制器:
module.exports = {
hello: ctx => {
ctx.body = 'Hello world';
},
};
在 app/router/home.js
文件中,定义一个路由,将 GET
请求映射到刚刚创建的控制器:
module.exports = app => {
const { router, controller } = app;
router.get('/', controller.home.hello);
};
现在,重启服务并通过访问 http://localhost:7001
查看结果。
项目定义与启动
创建一个简单的Egg.js项目,首先初始化项目:
$ egg-init my-app
$ cd my-app
$ npm install
在 config/config.default.js
中,可以配置应用的基本设置:
module.exports = {
// 默认端口
port: 7001,
};
在 app/controller/home.js
中,定义一个简单的控制器:
module.exports = {
hello: ctx => {
ctx.body = 'Hello world';
},
};
在 app/router/home.js
中,定义一个路由,将 GET
请求映射到刚刚创建的控制器:
module.exports = app => {
const { router, controller } = app;
router.get('/', controller.home.hello);
};
启动项目并访问 http://localhost:7001
查看结果。
配置文件介绍
Egg.js 的配置文件位于 config
目录下,主要有 config.default.js
和 config.local.js
。config.default.js
包含默认配置,而 config.local.js
用于覆盖默认配置以适应特定环境(如开发、测试、生产等)。
示例 config.default.js
文件:
module.exports = {
// 默认端口
port: 7001,
// 数据库配置
db: {
type: 'mysql',
config: {
host: 'localhost',
port: 3306,
user: 'root',
password: 'password',
database: 'example',
},
},
};
环境变量配置
Egg.js 支持环境变量配置,可以将敏感信息(如数据库密码、API 密钥等)存储在环境变量中,避免硬编码。
示例配置:
module.exports = {
port: process.env.PORT || 7001,
db: {
type: 'mysql',
config: {
host: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 3306,
user: process.env.DB_USER || 'root',
password: process.env.DB_PASSWORD || 'password',
database: process.env.DB_NAME || 'example',
},
},
};
日志配置
Egg.js 提供了强大的日志系统,可以按不同日志级别和格式输出日志。日志配置文件位于 config/config.default.js
,可以通过修改 logger
配置来调整日志行为。
示例日志配置:
module.exports = {
logger: {
level: 'info', // 日志级别
console: {
color: false, // 控制台日志颜色
json: false, // 是否输出 JSON 格式
},
},
};
实战案例:用户注册与登录功能
数据库连接配置
首先,在 config.default.js
文件中配置数据库连接信息:
module.exports = {
db: {
type: 'mysql',
config: {
host: 'localhost',
port: 3306,
user: 'root',
password: 'password',
database: 'userdb',
},
},
};
然后,在 app/config/config.default.js
中引入 Sequelize(推荐的 ORM 工具):
const Sequelize = require('sequelize');
const config = require('config');
module.exports = {
// 数据库配置
sequelize: new Sequelize(config.db.database, config.db.user, config.db.password, {
host: config.db.host,
dialect: 'mysql',
logging: false,
}),
};
用户模型设计
创建一个新的模型文件 app/model/User.js
:
module.exports = app => {
const { Sequelize, Model } = app;
class User extends Model {}
User.init({
username: {
type: Sequelize.STRING,
allowNull: false,
},
password: {
type: Sequelize.STRING,
allowNull: false,
},
}, {
sequelize: app.sequelize,
tableName: 'users',
});
return User;
};
创建数据库表:
const { User } = require('../model/User');
User.sync({ force: true }).then(() => {
// 表已创建
});
实现用户注册与登录
首先,在 app/controller/user.js
中实现注册和登录功能:
const { User } = require('../model/User');
module.exports = {
async register(ctx) {
const { username, password } = ctx.request.body;
try {
const user = await User.create({ username, password });
ctx.body = { success: true, message: '用户注册成功' };
} catch (err) {
ctx.body = { success: false, message: err.message };
}
},
async login(ctx) {
const { username, password } = ctx.request.body;
try {
const user = await User.findOne({ where: { username, password } });
if (!user) {
ctx.body = { success: false, message: '用户名或密码错误' };
} else {
ctx.body = { success: true, message: '登录成功' };
}
} catch (err) {
ctx.body = { success: false, message: err.message };
}
},
};
创建相应的路由文件 app/router/user.js
:
module.exports = app => {
const { router, controller } = app;
router.post('/register', controller.user.register);
router.post('/login', controller.user.login);
};
现在,通过访问 POST /register
和 POST /login
接口,可以实现用户注册和登录功能。
打包项目
为了将本地项目部署到生产环境,可以使用 npm run build
命令打包项目:
$ npm run build
打包完成后,app
目录下的代码会被压缩和优化,更适合部署到生产环境。打包后的目录结构类似于:
dist/
├── app/
│ ├── config/
│ ├── controller/
│ ├── router/
│ └── service/
├── config/
└── package.json
部署到云服务器
将打包好的项目文件上传到云服务器,例如使用 scp
命令将本地文件上传到服务器:
$ scp -r ./dist user@yourserver:/path/to/your/app
然后,使用 ssh
登录服务器并启动项目:
$ ssh user@yourserver
$ cd /path/to/your/app
$ npm install
$ npm start
监控与日志查看
使用工具如 PM2
来管理 Egg.js 应用的运行:
$ npm install pm2 -g
$ pm2 start app.js --name your-app
$ pm2 logs
这可以方便地查看日志和进行应用的管理和监控。
总结本文详细介绍了如何从零开始搭建和运行 Egg.js 项目,并通过用户注册与登录功能的实现,帮助读者深入理解 Egg.js 的实际应用。同时,通过项目打包、部署和监控的指导,读者可以更好地掌握 Egg.js 项目的实战技巧。
共同学习,写下你的评论
评论加载中...
作者其他优质文章