利用Egg.js迅速搭建现代化商业应用
2023-11-10 16:33:20
前言
在现代Web开发中,框架的使用已成为常态,它可以帮助我们快速构建应用,而无需浪费时间在重复的编码上。而在众多Node.js框架中,Egg.js凭借其强大的功能和易用性,已经成为众多开发者的首选。
本文将通过一步步的实践,带领你使用Egg.js搭建一个商用应用,该应用将包含用户注册、登录、商品管理等功能,并使用Swagger UI生成API文档。
搭建项目
首先,需要安装Egg.js CLI工具:
npm install -g egg-bin
然后创建一个新的项目:
egg init my-egg-app
该命令将在当前目录下创建一个名为my-egg-app的新项目。
配置数据库
接下来,需要配置数据库。本文将使用MySQL作为数据库,因此需要先安装MySQL驱动:
npm install mysql
然后在config/config.default.js文件中添加数据库配置:
module.exports = {
mysql: {
client: {
// host
host: '127.0.0.1',
// port
port: '3306',
// username
user: 'root',
// password
password: 'password',
// database
database: 'my_egg_app',
},
// load into app, default is open
app: true,
// load into agent, default is close
agent: false,
},
};
集成中间件
接下来,需要集成一些必要的中间件。本文将集成以下中间件:
- body-parser: 解析请求体
- helmet: 设置HTTP头以提高安全性
- cors: 允许跨域请求
在config/plugin.js文件中添加以下内容:
module.exports = {
bodyParser: {
enable: true,
encoding: 'utf8',
},
helmet: {
enable: true,
},
cors: {
enable: true,
package: 'egg-cors',
},
};
创建模型
接下来,需要创建模型。模型是用来数据库表结构的。本文将创建一个User模型和一个Product模型。
在app/model/user.js文件中添加以下内容:
module.exports = app => {
const { STRING, INTEGER } = app.Sequelize;
const User = app.model.define('user', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true },
username: { type: STRING(30), allowNull: false },
password: { type: STRING(30), allowNull: false },
});
return User;
};
在app/model/product.js文件中添加以下内容:
module.exports = app => {
const { STRING, INTEGER, DATE } = app.Sequelize;
const Product = app.model.define('product', {
id: { type: INTEGER, primaryKey: true, autoIncrement: true },
name: { type: STRING(30), allowNull: false },
price: { type: INTEGER, allowNull: false },
created_at: { type: DATE, allowNull: false },
updated_at: { type: DATE, allowNull: false },
});
return Product;
};
创建服务
服务是用来处理业务逻辑的。本文将创建一个UserService和一个ProductService。
在app/service/user.js文件中添加以下内容:
module.exports = app => {
class UserService extends app.Service {
async register(username, password) {
const user = await this.ctx.model.User.create({ username, password });
return user;
}
async login(username, password) {
const user = await this.ctx.model.User.findOne({ where: { username, password } });
return user;
}
}
return UserService;
};
在app/service/product.js文件中添加以下内容:
module.exports = app => {
class ProductService extends app.Service {
async create(name, price) {
const product = await this.ctx.model.Product.create({ name, price });
return product;
}
async list() {
const products = await this.ctx.model.Product.findAll();
return products;
}
async update(id, name, price) {
const product = await this.ctx.model.Product.findByPk(id);
product.name = name;
product.price = price;
await product.save();
return product;
}
async delete(id) {
const product = await this.ctx.model.Product.findByPk(id);
await product.destroy();
return product;
}
}
return ProductService;
};
创建控制器
控制器是用来处理HTTP请求的。本文将创建一个UserController和一个ProductController。
在app/controller/user.js文件中添加以下内容:
module.exports = app => {
class UserController extends app.Controller {
async register() {
const { username, password } = this.ctx.request.body;
const user = await this.service.user.register(username, password);
this.ctx.body = {
code: 0,
data: user,
msg: '注册成功',
};
}
async login() {
const { username, password } = this.ctx.request.body;
const user = await this.service.user.login(username, password);
this.ctx.body = {
code: 0,
data: user,
msg: '登录成功',
};
}
}
return UserController;
};
在app/controller/product.js文件中添加以下内容:
module.exports = app => {
class ProductController extends app.Controller {
async create() {
const { name, price } = this.ctx.request.body;
const product = await this.service.product.create(name, price);
this.ctx.body = {
code: 0,
data: product,
msg: '创建成功',
};
}
async list() {
const products = await this.service.product.list();
this.ctx.body = {
code: 0,
data: products,
msg: '获取成功',
};
}
async update() {
const { id, name, price } = this.ctx.request.body;
const product = await this.service.product.update(id, name, price);
this.ctx.body = {
code: 0,
data: product,
msg: '更新成功',
};
}
async delete() {
const { id } = this.ctx.request.body;
const product = await this.service.product.delete(id);
this.ctx.body = {
code: 0,
data: product,
msg: '删除成功',
};
}
}
return ProductController;
};
集成Swagger UI
Swagger UI是一个用于生成API文档的工具。本文将集成Swagger UI来生成API文档。
在config/plugin.js文件中添加以下内容:
swagger: {
enable: true,
package: 'egg-swagger-ui',
},
在app.js文件中添加以下内容:
const swaggerUI = require('egg-swagger-ui');
// 添加Swagger UI的路由
app.use('/swagger-ui', swaggerUI.routes(), swaggerUI.staticFiles());
// 扫描API文档注释并生成文档
app.swaggerize();
启动项目
最后,启动项目:
npm start
访问http://localhost:7001/swagger-ui即可查看API文档。
结语
本文通过一步步的实践,带领你使用Egg.js搭建了一个商用应用,该应用包含用户注册、登录、商品管理等功能,并使用Swagger UI