当前位置: 首页 > news >正文

Next.js【详解】获取数据(访问接口)

Next.js 中分为 服务端组件 和 客户端组件,内置的获取数据各不相同

服务端组件

方式1 – 使用 fetch

export default async function Page() {const data = await fetch('https://api.vercel.app/blog')const posts = await data.json()return (<ul>{posts.map((post) => (<li key={post.id}>{post.title}</li>))}</ul>)
}

方式2 – 使用 ORM 或 数据库

以 MongoDB 为例,使用 mongoose 连接

1. 安装 mongoose

pnpm i mongoose 

2. 创建数据库连接文件 src\app\lib\db.js

const mongoose = require("mongoose");async function connectDB() {try {// 连接到本地 MongoDB 数据库 -- mongodb://数据库的用户名:密码@数据库的主机名:端口号/数据库的名称await mongoose.connect("mongodb://test:password@localhost:27018/test");console.log("MongoDB 连接成功");} catch (error) {console.error("MongoDB 连接报错", error);// 退出进程process.exit(1);}
}module.exports = connectDB;

3. 创建数据表映射文件 src\app\lib\models\Blog.js

const mongoose = require("mongoose");const blogSchema = new mongoose.Schema({title: String,content: String,
});
// 需要有第三个参数,否则对应的数据表名称会是blogs
const Blog = mongoose.model("blog", blogSchema, "blog");module.exports = Blog;

4. 页面中导入使用

src\app\test\page.tsx

import connectDB from "../lib/db";
import Blog from "../lib/models/Blog";export default async function HomePage() {try {// 连接数据库let res = await connectDB();// 查询博客数据const blogList = await Blog.find();return (<div><h1>博客列表</h1><ul>{blogList.map((blog) => (<li key={blog._id.toString()}>{blog.title}</li>))}</ul></div>);} catch (error) {console.error("获取数据出错:", error);return <div>获取数据失败</div>;}
}

5. Docker destop 安装 MongoDB

见 https://blog.csdn.net/weixin_41192489/article/details/145176073

6. 使用 MongoDB Compass 连接 MongoDB

下载安装 MongoDB Compass
https://www.mongodb.com/zh-cn/docs/compass/current/

新建连接

在这里插入图片描述
在这里插入图片描述

7. 创建数据库 test , 数据表 blog

在这里插入图片描述
在这里插入图片描述

8. 创建一条测试数据

在这里插入图片描述

{"_id": {"$oid": "67aefdd5de9bca5aae5aa6f8"},"title": "第1篇博客的标题","content": "第1篇博客的内容"
}

在这里插入图片描述
在这里插入图片描述

9. 为数据库 test 创建用户名、密码和角色

在这里插入图片描述
在这里插入图片描述

db.createUser( { user: "test", pwd: "password", roles: [ { role: "dbOwner", db: "test" } ] } )
  • user:指定要创建的用户名。
  • pwd:指定该用户的密码。
  • roles:指定用户的角色,角色决定了用户对数据库的操作权限。可以指定多个角色,每个角色是一个包含 role 和 db 的对象。role 是角色名称,db 是角色生效的数据库。

常见的角色及其说明:

  • read:允许用户读取指定数据库中的数据。
  • readWrite:允许用户读写指定数据库中的数据。
  • dbAdmin:允许用户管理指定数据库,如创建索引、查看统计信息等。
  • userAdmin:允许用户管理指定数据库中的用户和角色。
  • dbOwner:拥有指定数据库的所有权限,包括读写、管理用户和角色等。
  • root:拥有所有数据库的最高权限。

10. 启动项目,测试效果

浏览器访问 http://localhost:3000/test,效果如下:

在这里插入图片描述

客户端组件

见官网 https://nextjs.org/docs/app/getting-started/fetching-data#client-components

http://www.lryc.cn/news/539197.html

相关文章:

  • 反向代理模块kd
  • leaflet前端初始化项目
  • CMS DTcms 靶场(弱口令、文件上传、tasklist提权、开启远程桌面3389、gotohttp远程登录控制)
  • Docker 入门与实战:从安装到容器管理的完整指南
  • git删除本地分支
  • spring cloud gateway限流常见算法
  • 本地使用docker部署DeepSeek大模型
  • C++ 设计模式-外观模式
  • 【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
  • SQL进阶技巧:如何统计用户跨端消费行为?
  • Fiddler笔记
  • 基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 51c自动驾驶~合集51
  • Redis 监视器:深入解析与实战指南
  • Java8适配的markdown转换html工具(FlexMark)
  • 超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍
  • Postman - Postman 导入 JSON 文件(导入集合或环境变量)
  • 傅里叶分析之掐死教程
  • ​实在智能与宇树科技、云深科技一同获评浙江省“人工智能服务商”、 “数智优品”​等荣誉
  • SpringAI系列 - RAG篇(三) - ETL
  • Leetcode2080:区间内查询数字的频率
  • 北斗导航 | 周跳探测算法(matlab源码)
  • Nginx实战_高性能Web服务器与反向代理的配置全解
  • 基于微信小程序的电影院订票选座系统的设计与实现,SSM+Vue+毕业论文+开题报告+任务书+指导搭建视频
  • MySQL智障离谱问题,删了库确还存在、也不能再创建同名库
  • 基于单片机的多功能门铃控制系统设计(论文+源码)
  • 分享8款AI生成PPT的工具!含测评
  • ”无痕模式“真的无痕?
  • 蓝桥杯班级活动
  • PHP支付宝--转账到支付宝账户