Next.js14快速上手


客户端

什么是Next

Next.js 是一个用于构建全栈 Web 应用程序的 React 框架。您可以使用 React Components 来构建用户界面,并使用 Next.js 来实现附加功能和优化。

项目在线地址

点击查看效果

官方文档

1.Next文档
2.Next示例项目

项目创建

项目创建有两种方法

// 1,基础
npx create-next-app@latest
// 2.官网最新示例
npx create-next-app@latest nextjs-dashboard --example "https://github.com/vercel/next-learn/tree/main/dashboard/starter-example" --use-pnpm

安装时看到如下效果

What is your project named? my-app
Would you like to use TypeScript? No / Yes
Would you like to use ESLint? No / Yes
Would you like to use Tailwind CSS? No / Yes
Would you like your code inside a src/ directory? No / Yes
Would you like to use App Router? (recommended) No / Yes
Would you like to use Turbopack for next dev? No / Yes
Would you like to customize the import alias (@/* by default)? No / Yes
What import alias would you like configured? @/*

安装完成后使用 npm run dev启动项目

查看项目目录结构

在这里插入图片描述

app属于根目录

在项目根目录下可以创建自己想要的文件夹,因为next是直接通过项目目录结构来访问里面的内容的。
在传统的前端中,需要自己手动定义路由,然后再去访问页面,而next不同,不需要自定义路由,只需要新建文件夹,然后使用文件夹的名称就可以在浏览器中直接访问该页面。

服务端

作为前端,最重要的应该是数据库部分,毕竟我们也不会经常去接触数据库等服务器部分的东西。

vercel

Vercel 是一个前端云平台,专门为开发者提供快速部署、托管以及持续集成服务,特别适合基于 JavaScript 和框架如
Next.js、React 等的应用程序。它的主要优势在于:
1.部署简便:通过连接 GitHub、GitLab 或 Bitbucket 仓库,代码更新后可以自动触发部署,无需手动设置复杂的服务器配置。
2.自动优化:Vercel 会自动优化前端资源,提供高效的性能,例如通过分片加载、边缘缓存和智能 CDN 来提升页面加载速度。
3.Next.js 的深度集成:作为 Next.js 的创建者,Vercel 提供了一流的支持,Next.js 的所有功能(如静态生成、服务端渲染、增量静态再生成等)都可以无缝使用。
4.全球 CDN:Vercel 拥有全球分布的内容分发网络(CDN),确保应用程序在全球范围内都能快速加载。
5.无服务器功能:Vercel 允许在不需要维护服务器的情况下创建 API 端点,提供“Serverless Functions”,适合一些轻量级的后端逻辑或计算。
5.团队协作:Vercel 支持团队协作,可以轻松邀请开发者共同开发、预览并部署应用。

数据库

Next官方推荐的是postgre

PostgreSQL(简称 Postgres)是一个功能强大、开源的对象关系型数据库管理系统(RDBMS)。它以其高度的可扩展性、稳定性和遵循标准的 SQL 实现而闻名,同时还提供了大量高级功能,支持复杂的数据库操作。

示例代码

其中使用的sql语句直接进行操作

async function seedUsers() {await client.sql`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`;await client.sql`CREATE TABLE IF NOT EXISTS users (id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,name VARCHAR(255) NOT NULL,email TEXT NOT NULL UNIQUE,password TEXT NOT NULL);`;const insertedUsers = await Promise.all(users.map(async (user) => {const hashedPassword = await bcrypt.hash(user.password, 10);return client.sql`INSERT INTO users (id, name, email, password)VALUES (${user.id}, ${user.name}, ${user.email}, ${hashedPassword})ON CONFLICT (id) DO NOTHING;`;}));return insertedUsers;
}

prisma

Prisma 是一个开源的下一代 ORM(对象关系映射)工具,旨在简化数据库的查询和管理。它为 TypeScript 和 JavaScript 开发者提供了类型安全的数据库访问方式,使开发者能够轻松地与数据库交互。

可以使用prisma进行数据库的操作,简单且方便

在Next中使用,以mysql为例

// 安装
npm install prisma --save-dev
// 初始化
npx prisma init
// 配置数据库,修改.env文件
DATABASE_URL="mysql://username:password@localhost:3306/mydb"
// username 是 MySQL 数据库的用户名
// password 是用户的密码
// localhost:3306 是 MySQL 运行的地址和端口
// mydb 是你使用的数据库名称

定义数据模型
在 prisma/schema.prisma 文件中,定义你的数据模型。一个简单的示例是创建 User 和 Post 表:

datasource db {provider = "mysql"url      = env("DATABASE_URL")
}generator client {provider = "prisma-client-js"
}model User {id    Int     @id @default(autoincrement())name  Stringemail String  @uniqueposts Post[]
}model Post {id      Int     @id @default(autoincrement())title   Stringcontent String?userId  Intuser    User    @relation(fields: [userId], references: [id])
}

完成后使用npx prisma db push生成表

创建 Prisma Client 实例
为了在项目中复用 Prisma Client,建议将其封装在一个模块中。你可以在 utils/db.ts 文件中这样做:

// utils/db.ts
import { PrismaClient } from '@prisma/client'const prisma = new PrismaClient()prisma.$connect().then(() => {console.log("数据库连接成功");}).catch((error) => {console.error("数据库连接失败", error);});export default prisma

使用 Prisma Client 与数据库交互
你可以在 API 路由或页面中的 getServerSideProps、getStaticProps 函数中使用 Prisma 进行数据库查询。

API 路由示例
在 app/api/users.ts 中创建一个 API 路由,用于获取用户列表:

// app/api/route.ts
import { NextRequest, NextResponse } from "next/server";
import prisma from "../utils/db";// 查询
export const GET = async () => {const data = await prisma.user.findMany({where: {},// 排序orderBy: {createdAt: "desc", // 按创建时间降序排序},});return NextResponse.json({success: true,data,});
};// 新增
export const POST = async (req: NextRequest) => {const body = await req.json();await prisma.user.create({data: {name: body.name,email: body.email,password:body.password},});return NextResponse.json({success: true,message: "新增成功",});
};

此时,可以正常对数据库进行操作(增删改查)。

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

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

相关文章

java实现日志按天打印

<?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 应用名称&#xff1a;和统一配置中的项目代码保持一致&#xff08;小写&#xff09; --><property name"APP_NAME" value"mita-main"/><!--日…

京准电钟解读:NTP网络对时服务器助力厂区改造方案

京准电钟解读&#xff1a;NTP网络对时服务器助力厂区改造方案 京准电钟解读&#xff1a;NTP网络对时服务器助力厂区改造方案 1&#xff09;系统概述 时钟系统可通过网络进行管理及时间校对&#xff0c;为厂区提供高精度、全天时、全天候 的授时服务&#xff0c;统一全厂各种系统…

vue中使用 html2canvas绘制图片并下载

html2canvas 是一个非常流行的库&#xff0c;可以将 HTML 元素转换为 canvas 图像。 1. 安装 html2canvas 首先&#xff0c;你需要安装 html2canvas 库。你可以使用 npm 或 yarn 来安装&#xff1a; npm install html2canvas yarn add html2canvas 2. 在 Vue 组件中使用 h…

AudioSetCaps数据集:包含190万对来自AudioSet录音的音频-字幕对。

2024-10-21&#xff0c;由西北工业大学、西安联丰声学技术有限公司、南洋理工大学、萨里大学和中国科学院声学研究所创建了AudioSetCaps数据集&#xff0c;包含190万对来自AudioSet录音的音频-字幕对。这个数据集在音频-文本检索和自动音频字幕两项下游任务上展现了卓越的性能&…

百度翻译以及另外三款翻译工具推荐!!!

在这个全球化的时代&#xff0c;翻译工具已经成为我们生活中不可或缺的一部分。我们需要使用翻译工具来克服语言障碍&#xff0c;无论是出国旅行、商务谈判还是学术研究。那么&#xff0c;市场上有各种各样的翻译工具。有哪些好用的在线翻译软件呢&#xff1f;别担心&#xff0…

系统架构设计师教程 第2章 2.1-2计算机系统及硬件 笔记

2.1计算机系统概述 ★☆☆☆☆ 计算机系统 (Computer System) 是指用于数据管理的计算机硬件、软件及网络组成的系统。 一般指由硬件子系统和软件子系统组成的系统&#xff0c;简称为计算机。 将连接多个计算机以实现计算机间数据交换能力的网络设备&#xff0c;称为计算机网…

uniapp基础笔记

与html区别 uni-app简单来说是 vue的语法 小程序的api。 文件结构 html <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><script type"text/javascript"></script><style t…

springboot配置文件占位符${},赋值方式

一&#xff1a;配置文件内部赋值 server:port: 48080 url: http://127.0.0.1:${server.port}这时url中的${server.port}48080 二&#xff1a;系统环境变量 有时我们在看到配置文件怎么没有找到占位符的变量的设置了&#xff0c;那就有可能调用了&#xff0c;系统的环境变量 …

解决 PHP 上传数据超时 504 错误:

解决 PHP 上传数据超时 504 错误&#xff1a; 一、了解问题 1.1 什么是 PHP 上传数据超时 504 错误&#xff1f; 当我们使用 PHP 进行文件上传时&#xff0c;如果上传的文件较大&#xff0c;可能会遇到数据超时错误。超时错误通常被服务器和网关使用&#xff0c;表示网络请求…

15_LVM的磁盘管理

系列文章导航&#xff1a;01_Linux基础操作CentOS7学习笔记-CSDN博客 文章目录 一、LVM的核心概念二、LVM的工作原理三、LVM逻辑卷的创建及使用创建LVM逻辑卷删除逻辑卷 四、LVM逻辑卷的拉伸与缩减拉伸一个逻辑卷拉伸一个卷组缩小一个逻辑卷缩小卷组 五、LVM逻辑卷快照备份与还…

LabVIEW提高开发效率技巧----节省内存

在LabVIEW开发过程中&#xff0c;内存管理是保障程序稳定性和性能的关键。本文将详细介绍如何通过队列处理来节省内存&#xff0c;尤其是如何通过解耦释放不再需要的数据&#xff0c;防止内存泄漏。通过多个实际例子&#xff0c;从不同角度探讨队列处理在大数据量或长时间运行的…

HTB:CozyHosting[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many TCP ports are open on CozyHosting? 2.The webserver on TCP port 80 issues a redirect to what domain? 3.What relative path on the webserver returns a 500 error? 4.What is the Java web framework used in the we…

初识算法 · 二分查找(4)

目录 前言&#xff1a; 寻找峰值 题目解析 算法原理 算法编写 寻找旋转排序数组中的最小值 题目解析 算法原理 算法编写 寻找缺失的数字 题目解析 算法原理 算法编写 前言&#xff1a; ​本文的主题是二分查找&#xff0c;通过三道题目讲解&#xff0c;一道是寻找…

【Web开发】什么是Nuxt? 利用Nuxt快速搭建前端项目

Nuxt官网&#xff1a;https://nuxt.com/ 启动一个Nuxt项目 在vscode的项目文件终端运行以下命令&#xff1a; npx nuxilatest init <my-app>npm installnpm run dev然后就启动了一个Nuxt项目 安装Nuxt UI Nuxt UI官网&#xff1a;https://ui.nuxt.com/ npx nuxilates…

线程的同步

目录 引入 认识条件变量 快速认识接口​编辑 认识条件变量​编辑 测试代码​编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步&#xff1a;在保证数据安全的前提下&#xff0c;让线程…

【小白学机器学习22】 多变量分析,多变量回归(草稿)

目录 1 概念名词&#xff1a; 1.1 双变量分析与单因素分析 1.2 变化 1.3 相关分析 Correlation analysis 1.4 回归分析 Regression analysis 1.5 相干和相关 1.5.1 相干relevant 1.5.2 相关Correlation 2 双变量分析&#xff0c;也就是单因素分析 3 相关分析 4 正…

The database mes could not be exclusively locked to perform the operation.

当你尝试更改数据库名字时&#xff0c;如果遇到错误消息 "The database [database_name] could not be exclusively locked to perform the operation"&#xff0c;这意味着 SQL Server 无法获得对数据库的独占锁&#xff0c;因为该数据库当前正在被其他会话使用。这…

Hugging Face HUGS 加快了基于开放模型的AI应用的开发

在过去一年左右的时间里&#xff0c;开源人工智能模型在性能上已经明显赶上了 OpenAI、Google 和其他公司的流行闭源模型。 然而&#xff0c;由于在不同硬件上部署和维护这些模型所带来的开销&#xff0c;开发人员尚未广泛采用这些模型。为了解决这个问题&#xff0c;Hugging F…

驱动开发系列26 - Linux Graphics 调试 mesa 的 glDrawArrays (二)

目录 一:概述 二:Gallium3D 的工作流程 三:tc_draw_vbo 与 tc_call_draw_single 的关系: 四:tc_draw_vbo 与 tc_call_draw_single 的具体执行流程: 五:mesa中线程池设计介绍: 六:总结: 一:概述 众所周知,Mesa 的 Gallium3D 是一个图形驱动框架,它将图形管线…

【Unity】Unity中文本中插入超链接且可点击响应,TextMeshPro的进阶用法

一、需求和尝试 今天遇到这样一个需求&#xff1a;在文本中插入超链接&#xff0c;且这个链接可以点击跳转对应的url&#xff0c;具体形式如下图所示。 其实这个有一个简单粗暴的方法&#xff0c;就是把需要加超链接的文本单独拿出来&#xff0c;和其他文本进行拼接&#xf…