Egg 1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.5 创建服务

news2024/12/26 22:16:33

Egg

Egg

本文仅用于学习记录,不存在任何商业用途,如侵删

文章目录

      • Egg
      • 1. 快速开始 Quick Start
        • 1.3 一步步 Step by Step
          • 1.3.5 创建服务
            • Hacker News API

1. 快速开始 Quick Start

1.3 一步步 Step by Step

1.3.5 创建服务

在实际开发中,控制器通常不会自己生成数据,也不会包含复杂的业务逻辑。复杂的业务逻辑应该抽象为业务逻辑层,即服务。

在这里插入图片描述

现在让我们创建一个服务来从HackerNews获取数据。

Hacker News API

https://github.com/HackerNews/API

在这里插入图片描述

const {keys} = require("../../config/config.default");
const Service = require('egg').Service;

class NewService extends Service {
    async list(page = 1) {
        const {serverUrl, pageSize} = this.config.news;

        const {data: idList} = await this.ctx.curl(
            `${serverUrl}/topstories.json`,
            {
                data: {
                    orderBy: '"$key"',
                    startAt: `"${pageSize * (page - 1)}"`,
                    endAt: `"${pageSize * page - 1}"`,
                },
                dataType: 'json',
            },
        );

        const newsList = await Promise.all(
            Object.keys(idList).map((key) => {
                const url = `${serverUrl}/item/${idList[key]}.json`;
                return this.ctx.curl(url,{dataType:'json'});
            }),
        );
        return newsList.map((res) => {res.data});

    }
}

module.exports = NewService;

在这里插入图片描述

Egg内置了HttpClient以帮助您发出 HTTP 请求。

在这里插入图片描述

然后稍微修改我们之前的控制器。

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

class NewsController extends Controller {
    async list() {
        const ctx = this.ctx;
        const page = ctx.query.page || 1;
        const newsList = await ctx.service.news.list(page);
        await ctx.render('news/list.tpl', {list: newsList});
    }
}

module.exports = NewsController;

在这里插入图片描述

并添加配置

exports.news = {
    pageSize: 5,
    serverUrl: 'https://hacker-news.firebaseio.com/v0',
}

在这里插入图片描述

重启服务,运行访问:

在这里插入图片描述

这里看到,一页是有5条,但是并没有数据进行展示

在这里插入图片描述

笔者点进去了那个网址,发现并没有东西,没有东西显示就不奇怪了,

在这里插入图片描述

毕竟是非常古老的东西了,谷歌一下有没有可用的接口

笔者找了一会儿,看到一个https://hacker-news.firebaseio.com/v0/topstories.json

在这里插入图片描述

我寻思这个地址和我项目中的是一样的。

我找到了官方仓库中的一个回复

在这里插入图片描述

OK,让我试试【感觉就是终端可以xx,但是咱们编写的应用不可以实现自动xx】

在这里插入图片描述

笔者按照代码的意思其实可以拿到数据,https://hacker-news.firebaseio.com/v0/item/33136554.json

但是要怎么才能实现应用也可以自己去拿到数据

开始谷歌

【超出笔者的知识范畴了…】

强制curlxxx

算了算了,有点子复杂,而且好像不太好。【这种就没有国内的镜像啥的…就很…】

我想到个办法,把所有json都下载下来,统一放到一个正常的URL

说搞就搞。他那个baseurl是固定的,我直接换成我的,起一个服务,开一个新端口,不要域名就好了,先弄个20条

在这里插入图片描述

先把这个下载下来

在这里插入图片描述

我直接放在这里,egg自己集成了静态资源,试试

在这里插入图片描述

噗,我真是个鬼才。

接下来就先下几个个【就前面几个吧,有数据能取到就行】

在这里插入图片描述

在这里插入图片描述

我真是个人才

试试

在这里插入图片描述

在这里插入图片描述

再试一次

在这里插入图片描述

好家伙,直接500了

莫非不能同一个地址相互访问?

我把这些文件传到了GitHub

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

再试一次

在这里插入图片描述

在这里插入图片描述

这次又200了,我晕

感觉也不是报错了,这个地址好像返回的是一个页面

笔者又搜了一下,如何直接获取GitHub上的json文件

在这里插入图片描述

但是好像Gitee更简单些

在这里插入图片描述

推上去了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

OK。

最后再试一次

在这里插入图片描述

在这里插入图片描述

这…

我又看了下,模板页面

在这里插入图片描述

很多东西我们压根儿没有

在这里插入图片描述

然后官方样例工程,和文档写的也对不上…

OK,到此为止。跳过【这个小结的主要目的还是为了演示怎么写一个服务】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/58946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计学生综合数据分析系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux根文件系统说明和常用命令

Linux根文件系统说明【1】Linux内核由哪几个子系统组成?【2】Linux下软连接和硬链接的区别?【3】sync【4】shutdown –h now【5】shutdown –h 20:25【6】shutdown –r now【7】shutdown –r 10【8】reboot【9】halt【10】Linux根文件系统说明【11】此主…

机器学习 分类、回归、聚类、特征工程区别

一、分类和回归的区别 简单理解分类和回归的区别在于输出变量的类型不同。 定量输出称为回归,或者说是连续变量预测;定性输出称为分类,或者说是离散变量预测。 举个例子: 预测明天的气温是多少度,这是一个回归任务&…

AD入门学习—元件库(原理图库)的创建

目录 1.1 电阻类、电容类、电感类元件创建 1.2 LED灯、按键类元件创建 1.3 IC芯片类元件创建 学习目录 创建一个PCB工程,原理图库,原理图。 1.1 电阻类、电容类、电感类元件创建 左侧的菜单栏不见了:视图,panels,projects。 按…

JavaWeb(三)

前言:JavaWeb的三大组件Servlet,Filter,Listener。是Java EE Web服务规定的服务器动态组件,由开发者编写,由web容器创建,加载顺序为Listener->Filter->Servlet。 当来了一个application请求 呢么web三…

一文读懂Java中的String类之助力Java进阶之路

🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 🥇博主昵称:Jovy. 🍟博客主页…

以太网 TCP协议(三次握手、四次挥手)

2.7.0 以太网 TCP协议(三次握手、四次挥手) 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的传输层通信协议。 面向连接:指使用TCP协议的程序在使用的时候,需要预先进…

PLC远程维护解决方案

一、方案背景:随着工业4.0大力推动智能制造,完善的售后维护和技术服务逐步被各设备厂商所重视,服务将成为企业新的利益增长点,传统的售后服务已经远远不能满足客户需求,甚至给公司带来一定的经营成本和维护成本的压力&…

volatile与Java内存模型

volatile与Java内存模型 被volatile修改的变量有2大特点 特点 可以保证 1.可见性 2.有序性 还是那张图,volatile只能保证可见性和有序性 那为什么volatile可以实现这些功能呢 volatile的内存语义 当写一个volatile变量时,JMM会把该线程对应的本地…

# 智慧社区管理系统-基础信息管理-05车位管理

一后端 1:entuty package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class Parking {private int id;private String numbers;//车位号private…

SQL 专项笔记

SQL语句分类 1.DDL 数据库定义语言 主要是用于来操作数据库 以及数据库表 关键字 alter drop create truncate DQL 数据库查询语言 主要是用于操作数据库表 主要用于查询数据库中的数据 关键字 selectDML 数据库操纵语言 主要是用于操作数据库中数据表 主要是对数据进行 增加…

Sequence和Item

一、概述 sequence指的是uvm_sequence类,而item指的是uvm_sequence_item类。对于激励生成和场景控制,是由sequence来编织的,而对于激励所需要的具体数据和控制要求,则是从item的成员数据得到的。 二、Sequence Item介绍 item是基…

【前端设计】SDC中生成时钟create_generated_clock语法解析

我们的目标是┏ (゜ω゜)=☞芯片前端全栈工程师~喵! 前言 好久没有写前端设计系列的博客了,这次因为要在系统里加入时钟分频器因此复习一下sdc中关于生成时钟的约束语法,以下内容来自《综合与时序分析的设计约束》和一些自己的理解。 生成时钟 在sdc约束中,由端口输入的…

JavaScript -- 07. 面向对象编程

文章目录面向对象编程1 面向对象编程介绍2 类3 属性4 方法5 构造函数6 封装7 多态8 继承9 对象的内存结构10 原型10.1 原型链10.2 原型的作用:11 修改原型12 instanceof和hasOwn12.1 instanceof12.2 in12.3 hasOwnProperty12.4 hasOwn13 旧类14 new运算符面向对象编…

用上了mac才知道的一些事,献给Mac新手

以前电脑用windows,工作后刚用上mac,发现很多使用逻辑挺让人感觉新奇,甚至摸不着头脑,下面一一列举,帮助想要入手Mac的新手! 1、鼠标滚轮的逻辑和Windows相反。 Mac上滚动鼠标控制页面上下滚动的逻辑和Windows刚好相…

使用 Learner Lab - 使用 S3 静态网页上传图片,搭配 API Gateway 与 Lambda

使用 Learner Lab - 使用 S3 静态网页上传图片,搭配 API Gateway 与 Lambda AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learne…

分割研究~~总结

搬来了基于实例分割的最新进展和发展历程,首先介绍了实例分割的基本逻辑,总结了目前主要研究方法及其原理和网络架构,对已发表的主流实例分割方法进行分析,最后对实例分割任务目前面临 的问题以及未来的发展趋势做出了分析,并针对所面临的问题…

磨金石教育插画干货分享|日本插画为什么独树一帜,那么受欢迎

插画的起源很早,在人类诞生文明的初级阶段,就有了岩画与壁画。在古典文明时代,中国印刷行业有了较大的发展,与之伴随的就是插画的长足发展。中国文化对日本起到了极大的影响。 在插画领域也是如此,客观的说&#xff0c…

CCF走进高校

CCF走进高校(山东大学-人机专委) 陶建华 人工智能与智能交互 人工智能的能力体系 感知智能:发展较快,人机交互场景运用较多; 认知智能:发展相对不成熟。 此外,专用智能领域发展较快&#xff0…

shell编程(一)

shell 简介 Shell 是一个用 C 语言编写的程序,一般我们说的shell编程,是指编写shell脚本。 Shell 负责完成用户与内核之间的交互(shell是一个命令解释器,负责将用户的命令解析成操作系 统所能理解的指令) 第一个shell脚本 创建…