egg.js 三层结构

本文介绍了Node.js MVC架构中的关键组件,包括视图、控制器、数据模型和服务。通过示例展示了如何配置路由,使得HTTP请求能够调用到对应的控制器方法,进一步从服务层获取真实接口数据并返回。示例中使用了Egg.js框架,控制器中调用了newsService的list方法,该方法通过curl请求获取新闻列表数据,并将其返回为JSON格式。
摘要由CSDN通过智能技术生成

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值