mvc 结构 ----- 约定由于配置
视图 (view)、
控制器(controller)
数据模型 Model(Service)
配置文件(config)
路由配置:router.js
module.exports = app => {
const { router, controller } = app;
router.get('/news', controller.news.list); // 访问controller层news.js 中 list方法
};
Controller
const Controller = require('egg').Controller; //引入内置方法
class NewsController extends Controller { //定义类
async list() {
//获取上下文
const ctx = this.ctx;
// 路由里的参数
const page = ctx.query.page || 1;
//访问service层 接收真实接口数据返回
const newsList = await ctx.service.news.list(page);
newsList.code = 200;
newsList.helper = this.ctx.helper.delOne();
this.ctx.status = 200;
//数据返回json格式,直接输出
this.ctx.body = newsList;
//数据输入到页面上显示
//await this.ctx.render('../view/list.html', newsList);
}
}
module.exports = NewsController;
service
const Service = require('egg').Service;
const qs = require('qs'); //node内置模块 是一个增加了一些安全性的查询字符串解析和序列化字符串的库
class newsService extends Service {
async list() {
const { ctx } = this;
console.log(qs.stringify(ctx.request.query)); //qs.stringify()将对象 序列化成URL的形式,以&进行拼接
//一些公共配置项,baseurl等
const { serverUrl, pageSize } = this.config.news;
//真实数据接口
const url = serverUrl + '/topics';
//请求参数获取数据
const { data } = await this.ctx.curl(url, {
data: ctx.request.query,
dataType: 'json',
method: 'GET'
});
//把数据返回
return data;
}
}
module.exports = newsService;