cnpm i -g egg-init 下载一键生成器
初始化项目 egg-init
项目目录
egg
下包
<br />npm i -g egg-init<br />npm i --save egg egg-bin<br />
### 目录结构
设置字段
<br /> "scripts": {<br /> "dev": "egg-bin dev"<br /> },<br />
执行 npm run dev 自动生成logs目录、run目录
- app目录
- controller目录 请求的逻辑代码<br /> - home.js<br /> - user.js<br /> - public目录 自动生成<br /> - service 目录 服务端的<br /> - home.js <br /> - router.js<br />- config目录<br /> - config.default.js<br /> - plugin.js<br />- package.json<br />- logs目录 自动生成<br />- run目录 自动生成
View:作为用户的 视图表现 部分,常见的展示形式如浏览器作为载体的网页、原生APP应用界面、桌面应用界面等,用于提供用户界面以便收集、响应用户行为产生的数据;
>
> Controller:作为 控制器层 部分,控制用户界面(View)的数据流转途径,主要行为包含接收用户数据请求、发送请求至业务层(Service)、获取业务层(Service)数据响应,将响应数据发送至用户界面(View),或生成相应的模板界面发送至用户;
>
> Service:作为 业务处理层 部分,主要负责收集及对数据进行相应的运算处理,主要行为包含收集控制器请求数据、数据有效性验证、运算、请求数据模型(Model)、接收数据模型(Model)响应消息、响应结果至控制器等;
>
> Model:作为 数据模型层 部分,主要用于将数据持久化(OUT)、查询持久化数据(IN),常见行为如对数据库进行操作、缓存数据库数据等;
app/router.js
<br />module.exports=(app)=>{<br /> let {controller,router}=app<br /> //创建接口 连接到controller/home.js 的product方法<br /> router.get("/getProdectList",controller.home.product)<br /> router.get("/getDetail",controller.home.detail)<br /> //post请求 在config.default.js中设置<br /> router.post("/login",controller.user.login)<br />}<br />
config/config.default.js
```
let config={}
config.keys = ‘123321’
//设置post请求的body获取请求参数
config.bodyParser = {
jsonLimit: “lmb”,
formLimit: “lmb”
}
//关闭安全防护 有post请求时设置
config.security={
csrf: {
enable: false
}
}
//文件上传
config.multipart={
mode:”file”
}
//设置数据库的基本参数
config.mysql= {
// 单数据库信息配置
client: {
// host
host: ‘localhost’,
// 端口号
port: ‘3306’,
// 用户名
user: ‘root’,
// 密码
password: ‘123321’,
// 数据库名
database: ‘gxb’,
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
}
module.exports=config }
}
```
config/plugin.js
<br />//连接数据库<br />exports.mysql = {<br /> enable: true,<br /> package: 'egg-mysql',<br /> };<br />
controller/home.js
<a name="neRmZ"></a>
#### //控制器
const {Controller}=require("egg")<br />class Home extends Controller{<br /> product(){<br /> const {ctx}=this<br /> ctx.body=[{<br /> name:"zhangsan",<br /> age:"22"<br /> }]<br /> }<br /> async detail(){<br /> const {ctx}=this<br /> let {query}=ctx.request<br /> const {id}=query<br /> const {user}=await ctx.service.home.find(id)<br /> console.log(user)<br /> ctx.body={<br /> user<br /> }<br /> }<br />}<br />module.exports=Home<br />
controller/user.js
```
const {Controller}=require(“egg”)
class User extends Controller{
login(){
const {ctx} =this
const {id}=ctx.request.body
//console.log(body,”pppppppppp”)
console.log(id)
ctx.body={
code:221,
}
}
}
service/home.js(与controller下需要建立连接的文件同名)
- 与controller/home.js建立连接
```
const { Service } = require(“egg”)
class HomeService extends Service {
async find(id) {
// 假如 我们拿到用户 id 从数据库获取用户详细信息
const user = await this.app.mysql.get(‘new’, { id: id})
return { user };
}
}
module.exports = HomeService
- 上传文件与存储
const {Controller}=require("egg")
const path=require("path")
const fs=require("fs")
const savePhoto=(filename,image)=>{
const avaterPath=path.join(process.cwd(),"app/public/avater",filename)//拼接路径
fs.writeFileSync(avaterPath,image)//写入文件
}
class UserController extends Controller{
upload(){
let {filename,filepath}=this.ctx.request.files[0]
let image=fs.readFileSync(filepath)//读取文件
savePhoto(filename,image)
this.ctx.body={
code:1,
msg:"upload success",
url:`public/avater/${filename}`
}
}
}
module.exports=UserController
总结
#### 连接数据库
- config/config.default.js 设置数据库的基本配置
2. config/plugin.js 连接数据库
3. service 目录创建连接