创立我的项目和根底配置
全局配置npm源
npm config set registry https://registry,npm.taobao.org
egg.js初始化
mkdir egg-example && cd egg-examplenpm init egg --type=simple --registry https://registry.npm.taobao.orgnpm install
启动我的项目
npm run dev
敞开csrf开启跨域
// 装置扩大npm i egg-cors --save// 启用egg-cors插件 /config/plugin.jscors:{ enable: true, package: 'egg-cors',},// 参数配置 config / config.default.jsconfig.security = { // 敞开 csrf csrf: { enable: false, }, // 跨域白名单 domainWhiteList: [ 'http://localhost:3000' ],};// 容许跨域的办法config.cors = { origin: '*', allowMethods: 'GET, PUT, POST, DELETE, PATCH'};
全局异样中间件
中间件app/middleware/error_handler.js
module.exports = (option, app) => { return async function errorHandler(ctx, next) { try { await next(); // 404 解决 if(ctx.status === 404 && !ctx.body){ ctx.body = { msg:"fail", data:'Not Find' }; } } catch (err) { const status = err.status || 500; // 生产环境时 500 谬误的具体谬误内容不返回给客户端,因为可能蕴含敏感信息 const error = status === 500 && app.config.env === 'prod'? 'Internal Server Error': err.message; ctx.body = { msg:"fail", data:error }; ctx.status = status; } }; };
注册到全局配置中 config/config.default.js
config.middleware = ['errorHandler'];
接口返回值封装
// app\extend\context.jsmodule.exports = { success(data = '', msg = 'ok', code = 200) { this.status = code this.body = { msg, data } }, error(data = '', msg = 'fail', code = 400) { this.status = code; this.body = { msg, data } }};
数据库sequelize
装置配置
// 装置必要的扩大npm install --save egg-sequelize mysql2//启动扩大 config/plugin.jsexports.sequelize = { enable: true, package: 'egg-sequelize',};//配置sequelize 扩大 config/config.default.jsconfig.sequelize = { dialect: 'mysql', host: '127.0.0.1', username: 'root', password: '123456', port: 3306, database: 'database_development', // 中国时区 timezone: '+08:00', define: { // 勾销数据表名复数 freezeTableName: true, // 主动写入工夫戳 created_at updated_at timestamps: true, // 字段生成软删除工夫戳 deleted_at // paranoid: true, createdAt: 'created_at', updatedAt: 'updated_at', // deletedAt: 'deleted_at', // 所有驼峰命名格式化 underscored: true }};
数据迁徙
//装置扩大npm install --save-dev sequelize-cli//配置文件 .sequelizerc'use strict';const path = require('path');module.exports = { config: path.join(__dirname, 'database/config.json'), 'migrations-path': path.join(__dirname, 'database/migrations'), 'seeders-path': path.join(__dirname, 'database/seeders'), 'models-path': path.join(__dirname, 'app/model'),};//初始化 Migrations 配置文件和目录npx sequelize init:confignpx sequelize init:migrations// npx sequelize init:models//创立数据库npx sequelize db:create// 降级数据库npx sequelize db:migrate// 如果有问题须要回滚,能够通过 `db:migrate:undo` 回退一个变更npx sequelize db:migrate:undo// 能够通过 `db:migrate:undo:all` 回退到初始状态npx sequelize db:migrate:undo:all
模型关联
User.associate = function(models) { // 关联用户材料 一对一 User.hasOne(app.model.Userinfo); // 反向一对一关联 // Userinfo.belongsTo(app.model.User); // 一对多关联 User.hasMany(app.model.Post); // 反向一对多关联 // Post.belongsTo(app.model.User); // 多对多 // User.belongsToMany(Project, { as: 'Tasks', through: 'worker_tasks', foreignKey: 'userId' }) // 反向多对多 // Project.belongsToMany(User, { as: 'Workers', through: 'worker_tasks', foreignKey: 'projectId' })}