之前已经简单的使用egg-init初始化项目,并创建控制器controller和服务service

在实际项目中,

  service主要负责数据的请求,并处理(http请求)

  controll主要负责获取service中得到的最终数据,并渲染给模板view

  view主要负责模板渲染

 

在此,先尝试从远程获取http数据(非数据库获取)

配置新闻列表页和详情页路由

/app/router.js

 router.get('/news', controller.news.index);
router.get('/news/:id', controller.news.detail);

创建控制器

/app/controller/news.js

 const Controller = require('egg').Controller;

 class NewsController extends Controller {
async index() {
// ES6解构赋值
const { ctx, service } = this;
const title = '新闻列表';
const newsList = await service.news.getAll(); // 异步获取service返回的数据,必须使用await
await ctx.render('news', {
title,
newsList
})
} async detail() {
const { ctx, service } = this;
const title = '详情';
const id = ctx.params.id; // 获取路由/:id的参数
const newsItem = await service.news.getOne(id); //异步获取service返回的数据,必须使用await
await ctx.render('detail', {
title,
newsItem
})
}
} module.exports = NewsController;

创建服务

/app/service/news.js

  

 const Service = require('egg').Service;

 class NewsService extends Service {
async getAll() {
const { config } = this;
    // config.url是接口的公共地址,推荐在app/config/config.default.js配置
const re = await this.ctx.curl(`${config.url}/此处是新闻列表的api接口`)
const res = JSON.parse(re.data) // 这里根据实际返回的数据进行格式化处理,最后返回一个对象
// console.log(res)
return res.result;
} async getOne(id) {
const url = this.config.url;
const re = await this.ctx.curl(`${url}/此处是单条新闻的api接口&id=${id}`);
const res = JSON.parse(re.data).result[0]; // 获取第一条
console.log(res);
return res;
}
} module.exports = NewsService;

创建模板

列表模板, app/view/news.ejs

 <ul class="list">
<% newsList.forEach(function (item, index) { %>
<li class="item"><a href="/news/<%= item.aid %>"><%= item.title %></a></li>
<% })%>
</ul>

详情模板,app/view/detail.ejs

 <div class="item-wrapper">
<h3 class="item-title"><%= newsItem.title %></h3>
<p class="item-summary"><%= newsItem.summary %></p>
<div class="item-content">
<!--在ejs语法中, - 表示解析HTML数据 -->
<%- newsItem.content %>
</div>
</div>

在模板中引入静态资源文件如CSS, /public/是默认的路径

<link rel="stylesheet" href="/public/css/news.css">

  

egg.js异步请求数据的更多相关文章

  1. 使用load()方法异步请求数据

    使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为: load(url,[data],[callback]) 参数url为加载服务器地址,可选项d ...

  2. jQuery基础(Ajax,load(),getJSON(),getScript(),post(),ajax(),同步/异步请求数据)

    1.使用load()方法异步请求数据   使用load()方法通过Ajax请求加载服务器中的数据,并把返回的数据放置到指定的元素中,它的调用格式为:   load(url,[data],[callba ...

  3. 09.VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据,返回字符串

    cmd下安装axios npm install axios 安装好后,会多出node_modules文件夹 思路: 监听data里的word改变时,发送ajax异步请求数据, 把返回的数据赋值给dat ...

  4. python爬虫(3)——用户和IP代理池、抓包分析、异步请求数据、腾讯视频评论爬虫

    用户代理池 用户代理池就是将不同的用户代理组建成为一个池子,随后随机调用. 作用:每次访问代表使用的浏览器不一样 import urllib.request import re import rand ...

  5. 解决ajax异步请求数据后swiper不能循环轮播(loop失效)问题、滑动后不能轮播的问题。

    问题描述: 1.我使用axios异步请求后台的图片进行渲染后不能实现循环轮播,也就是loop失效,但是静态写死的情况下不会出现这种问题. 2. 分析: swiper的机制是:初始化的时候将swiper ...

  6. Java爬虫系列四:使用selenium-java爬取js异步请求的数据

    在之前的系列文章中介绍了如何使用httpclient抓取页面html以及如何用jsoup分析html源文件内容得到我们想要的数据,但是有时候通过这两种方式不能正常抓取到我们想要的数据,比如看如下例子. ...

  7. js中请求数据的$post和$ajax区别(同步和异步问题)

    $.post和$.Ajax都为页面上向后台发送请求,请求数据 1.post 因为post默认为异步请求,可是有时候我们会发现,本来要求请求马上出现,可是异步会导致后面突然再执行,这样就出很多问题 2. ...

  8. ajax异步请求数据

    源码1: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  9. Jquery异步请求数据实例

    一.Jquery向aspx页面请求数据 前台页面JS代码: $("#Button1").bind("click", function () { $.ajax({ ...

随机推荐

  1. spark DataFrame的创建几种方式和存储

    一. 从Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLContext及HiveContext接口来实现其对数据加载.转换.处理等功能.Sp ...

  2. BZOJ4836 [Lydsy1704月赛]二元运算 分治 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8830036.html 题目传送门 - BZOJ4836 题意 定义二元运算$opt$满足 $$x\ opt\ y ...

  3. P1265 公路修建 最小生成树

    题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一“行路难”的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一轮中,每个城市选择一个 ...

  4. twig模板基本学习

    twig基本语法 1.输出 {{    }} 2.判断 {%    %} 3.注释 {#      #} 具体使用时参考https://twig.symfony.com/doc/2.x/官网文档进行查 ...

  5. Service的绑定过程

    --摘自<Android进阶解密> 第一步:ContextImpl到AMS的调用过程 第二步:Service的绑定过程 1)几个与Service相关的对象类型 * ServiceRecor ...

  6. 高性能平滑动画_requestAnimationFrame

    高性能平滑动画_requestAnimationFrame 在下一次重绘之前,执行一个函数

  7. [LeetCode] Ambiguous Coordinates 模糊的坐标

    We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)".  Then, we re ...

  8. pytorch入门与实践-3 Tensor详解

    1--如第二章所讲,Tensor的本质是矩阵或数据 2--对Tensor的操作分类 |----API分类 |------torch中定义的: t.f(a,b) |------tensor的成员函数: ...

  9. openlayers应用原理

    1.数据组织 OpenLayers通过同层(Layer)进行组织渲染,然后通过数据源设置具体的地图数据来源.因此,Layer与Source是密切相关的对应关系,缺一不可.Layer可看做渲染地图的层容 ...

  10. Python 模块定义、导入、优化详解

    一.定义 模块:用来从逻辑上组织 python 代码(变量,函数,类, 逻辑:实现一个功能),本质就是 .py 结尾的 python文件(例如:test.py文件,对应的模块名:test) 包:用来从 ...