之前已经简单的使用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. Django搭建博客文章---模型层

    页面展示所需字段 1.文章标题---文本类型 2.文章摘要---文本类型 3.文章内容--文本类型 4.唯一的ID标记---int数字类型(自增.主键) 5.发布日期--日期类型 模型层定义字段 1. ...

  2. Think twice, code once.

    .Think twice, code once. .WJMZBMR神犇的话 我还记得很久以前有人跟我说的话,自己选择的路,跪着也要走完.朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感 ...

  3. Anaconda介绍、安装及使用教程

    https://www.jianshu.com/p/62f155eb6ac5 Anaconda介绍.安装及使用教程 Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台的特点,可以 ...

  4. Hadoop双namenode配置搭建(HA)

    配置双namenode的目的就是为了防错,防止一个namenode挂掉数据丢失,具体原理本文不详细讲解,这里只说明具体的安装过程. Hadoop HA的搭建是基于Zookeeper的,关于Zookee ...

  5. golang str 首字母大写

    首字母大写 //如果是小写字母, 则变换为大写字母 func strFirstToUpper(str string) string { if len(str) < 1 { return &quo ...

  6. 浅谈vue性能优化

    基础优化 所谓的基础优化是任何 web 项目都要做的,并且是问题的根源.HTML,CSS,JS 是第一步要优化的点 分别对应到 .vue 文件内的,<template>,<style ...

  7. linux开通端口允许其他机器访问

    命令开通8080端口允许其他机器对linux的访问: iptables -I INPUT -p tcp --dport 8080 -j ACCEPT

  8. vs代码模板制作

    VS2008代码模板制作 一,类模板制作: 路径:C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplate ...

  9. 【UNIX环境高级编程】文件I/O

    [UNIX环境高级编程]文件I/O大多数文件I/O只需要5个函数: open.read.write.lseek以及close 不带缓冲的I/O: 每个read和write都调用内核中的一个系统调用 1 ...

  10. Python extend()方法--list

    描述 extend()方法:在列表末尾追加可迭代对象中的元素. 语法 语法格式:list.extend(iterable) 参数 iterable:可迭代的对象,这里的对象可以是字符串.列表.元组.字 ...