nextjs教程三:获取数据

待兔
• 阅读 493

数据的获取

数据获取是任何应用程序中最重要的部分,本文将介绍,如何在react, nextjs中获取数据

主要有种方法可以获取数据

  • 在服务端,用 fetch 获取数据
  • 在客户端,通过路由处理器获取数据

下面分别介绍一下这4种获取数据的方式

一、 fetch 获取数据

nextjs扩展了本机的fetch WEB API , 所以可以在服务端的每个请求上配置缓存和重新校验的行为

你可以在服务端组件中使用 async, await

下面是获取一个页面的例子:

export default async function Page() {
  const res = await fetch("https://www.helloworld.net");
  const data = await res.text();

  return (
    <div>
      <p>{data}</p>
    </div>
  );
}

默认情况下,服务端执行异步函数,fetch 是不缓存数据的(默认配置:cache: no-store)

1.1 缓存数据

缓存数据是提升性能一种很好的方式 ,如何配置呢 ? 比如上面的例子

fetch('https://www.helloworld.net', { cache: 'force-cache' })

但是在下面两种情况下,是不缓存数据的。

  • 在服务端执行异步函数获取数据
  • 使用路由处理器,而且是POST请求

1.2 缓存过期时间

可以给缓存添加一个过期时间,如下: fetch('https://www.helloworld.net', { next: { revalidate: 3600 } })

二、路由处理器

上一节的文章中,我们就讲过,nextjs 是可以直接写接口的。

如何写这样一个接口呢?步骤如下:

  • app目录下,创建一个api目录

  • app目录下,随便创建一个目录,假如叫 chat

  • chat 目录下,创建一个文件route.ts ,注意:必须叫 route.ts或者route.js

以上步骤主要目的就是创建一个文件: rootDir/app/chat/route.ts

route.ts文件中,添加如下代码:

import {NextApiRequest, NextApiResponse} from 'next';
import {NextResponse} from "next/server";

export const GET = async (request: NextApiRequest, context: any) => {
  const {params} = context;

  try {
    return NextResponse.json({
      status: 200,
      data:{
        site:'www.helloworld.net',
        author:'待兔'
      }
    });

  } catch (e: any) {
    return NextResponse.json({status: 500, message: e.message});
  }
}

在浏览器中访问http://localhost:3000/api/chat

响应如下:

nextjs教程三:获取数据

类比以上的操作,可以创建其它的api, 这个就是路由处理器,英文叫 Route Handlers , 也许我翻译的并不准确

以上就是经常用的获取数据的方式,如果对你有帮助,请点个关注转发一下。谢谢

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
3年前
商业数据分析从入门到入职(9)Python网络数据获取
@toc前言本文主要讲Python最常见的应用之一——网络数据获取,即爬虫:先介绍了网页和网络的基础知识,为从网页中获取数据打好基础;接下来以两个案例介绍从网络中获取数据和处理数据的不同方式,以进一步认识Python爬虫和数据处理。一、网络和网页基础知识1.数据来源数据源有很多,可以从数据库中获取,可以从文件中获取,也可以从
东方客主 东方客主
3年前
PHP实现文本快速查找 - 二分查找法
起因先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称、根据网站分类ID获取分类名称、根据关键词ID获取关键词等。虽然以上需求都可以在原始建表时,通过冗余数据来解决。但仍有部分业务存的只是关联表的ID,数据分析时需要频繁的查表。所读的表存在共同的特点数据几乎不会变更数据量适中,从一万
浩浩 浩浩
3年前
【Flutter实战】图片和Icon
3.5图片及ICON3.5.1图片Flutter中,我们可以通过Image组件来加载并显示图片,Image的数据源可以是asset、文件、内存以及网络。ImageProviderImageProvider是一个抽象类,主要定义了图片数据获取的接口load(),从不同的数据源获取图片需要实现不同的ImageProvi
大数据的强大应用到底体现在哪些方面?
在中国的应用已近十年,但对应用的深入思考却没有跟上。想象一下大数据在统计分析模式下的应用,会影响其他领域在信息获取方向的应用创新。本文将从信息获取、网络服务和数据整合三个方向探讨大数据的应用,拓宽应用视野。一、信息获取的大数据应用。1.1信息获取和知识发现。大数据最发人深省的应用是信息获取,通常被认为是统计分析模式的延伸。由维克多·迈耶勋伯格和肯尼斯·库克耶
Stella981 Stella981
3年前
Js和Thymeleaf如何获取model中的值
简述在大多数的项目架构中,使用SPringBoot发布微服务,前端采用Thymeleaf作为Html模版,使用Jquery作为动态脚本,那么Thymeleaf和Jquery是如何获取Model中的数据呢?Jquery获取Model中的数据方法1:将model中的值赋给hidden,然后Js获取隐藏域的值。
Wesley13 Wesley13
3年前
oracle随机获取数据
以前从一个表中随机获取数据的时候,都是先把数据读取到来,然后再在程序中来随机抽取一部分数据,今天告诉大家一种使用SQL语句的方法来随机获取一部分数据SQLServer: 随机获取 10 条数据SELECT TOP 10  FROM 表名 ORDER BY NEWID()ORACLE: 随机获取 
Wesley13 Wesley13
3年前
3行!仅3行代码就能抓取B站(弹幕、评论、用户)数据
今天介绍一个获取B站数据的Python扩展库bilibili\_api可以获取的数据包括:video视频模块user用户模块dynamic动态模块这次用“RunningMan”十周年特辑的视频,来做个获取弹幕的Demo。我是对比没有对比,就没有伤害,就像最近的“哈工大”某学生和“浙大”某
Stella981 Stella981
3年前
Es6获取数据
$(function(){$.ajax({//请求方式type:"GET",//文件位置url:"js/data.json",//返回数据格式为json,也可以是其他格式如dataType:"json",//请求成功后要执行的函数,拼接htmlsuccess:function(res){var
Stella981 Stella981
3年前
Angular路由参数传递
一、路由时传递参数的方式1、在查询参数中传递数据,如//前台页面<arouterLink"/product"queryParams"{id:1}"商品详情</a//后台页面获取参数exportclassProductComponentimplementsOnInit{
小白学大数据 小白学大数据
4个月前
Java爬虫图像处理:从获取到解析
在互联网时代,数据的价值日益凸显,而爬虫技术作为获取网络数据的重要手段,其应用范围越来越广泛。本文将探讨Java爬虫在图像处理方面的应用,包括如何从网络中获取图像数据,以及如何对这些数据进行解析和处理。Java爬虫技术概述Java作为一种成熟的编程语言,拥