之前已经简单的使用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. 网络编程-Mysql-2、各种查询

    1.先创建一个学生表 create table students ( id int auto_increment not null primary key, name varchar(20)  not ...

  2. ISP PIPLINE (三) BPC

    what is the Bad Pixel? 坏点为死点,也就是基本不随照度变化呈现光电线性转换的关系.表现为暗态常亮,亮态常暗. 坏点分类:静态坏点:亮坏点,暗坏点.                 ...

  3. [Web]Restful风格的适用场景

    最近一直在兜兜转转Restful的相关内容,准备在原先的项目上构建restful的API. 实践过程很别扭,直到看到这篇文章[A Brief Introduction to REST], 我才终于断定 ...

  4. 2017 United Kingdom and Ireland Programming Contest (UKIEPC 2017)

    A. Alien Sunset 暴力枚举答案即可. #include<cstdio> int n,i,mx; struct P{ int h,r,t; bool night(int x){ ...

  5. angular.isDefined()

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. JS的string操作

    1. charAt();如果想获取字符编码,则:charCodeAt(); var stringValue ="hello world"; alert(stringValue.ch ...

  7. ActivityRouter 框架简单实用

    ActivityRouter组件化开发小助手用法如下: 跟目录build.gradle dependencies { // activityRouter classpath 'com.neenbeda ...

  8. java重构四则运算

    package 重构四则运算; import java.io.IOException; public class Test { public static void main(String[] arg ...

  9. Bypass 360主机卫士SQL注入防御(附tamper脚本)

    0x01 前言 在测试过程中,经常会遇到一些主机防护软件,对这方面做了一些尝试,可成功bypass了GET和POST的注入防御,分享一下姿势. 0x02 环境搭建 Windows Server 200 ...

  10. 使用Dubbo的SPI扩展机制实现自定义LoadBalance——方法二 不改源码添加META-INF/dubbo元数据

    一.官网提供的方法 参考官网 http://dubbo.apache.org/zh-cn/docs/dev/impls/load-balance.html 二.方法总结 在工程中创建类并实现LoadB ...