通过使用JavaScript/node.js来研究建筑物API或Web服务,通常可以使用框架(高指南,使用节点的本地本地)(例如Express或NestJS)找到各种教程,在社区中广泛使用了健康的工具。预计,考虑到JavaScript生态系统的大小,我们不仅限于两个工具,对吗?
最近,Nuxt 3的发展一直引起我的注意开发框架的基础。
Uny
NUXT团队创建了组织UnJS,负责创建和维护几个“通用”和任何框架和/或环境的代理的软件包。一起,其中许多包装形成了NUXT 3的基础。
H3 E硝基
作为一个全栈框架,NUXT提供了在项目中创建HTTP服务器的能力,H3对此负责。当隔离时,H3与Express非常相似,但是使用回调的事件系统系统。
我们将在本教程中使用的o Nitro将H3 H3服务器与其他一些UNJS库相结合,这些库中的一些有趣的功能,例如 autoimports 已安装的库和基于文件(如我们在Next.js或NUXT本身之类的框架中找到的那样)。
Nitro是在NUXT 3项目的server
文件夹中自动生成的HTTP服务器。
我们今天要建造什么?
我们将从零图书馆休息中创建,管理书籍,作者和gãnneros。
mkdir books-nitro-api
cd books-nitro-api
npm init -y
npm install --dev nitropack
打开代码编辑器中的文件夹,我们可以将Nitro脚本插入到我们的package.json
中。结果应与以下方式相似。
{
"name": "books-nitro-api",
"version": "1.0.0",
"license": "MIT",
"scripts": {
"dev": "nitro dev",
"build": "nitro build"
},
"devDependencies": {
"nitropack": "^1.0.0"
}
}
Typescript由Nitro自动管理。
让我们在我们项目的根部创建tsconfig.json
文件,并添加以下包含在documentação上的包含。
{
"extends": "./.nitro/types/tsconfig.json"
}
运行项目后,将自动生成.nitro
和.output
文件夹。
完成配置步骤,让我们添加nitro.config.ts
文件,然后插入与Nitro configuração函数相对应的包含的包含。
import { defineNitroConfig } from 'nitropack'
export default defineNitroConfig({})
让我们创建我们的第一个路线,如前所述,Nitro具有基于文件的系统来定义其路线。在根上,我们将创建router
文件夹,并创建将与服务器的/
路由相对应的Koud7文件。
在index.ts
文件中,我们将定义我们的第一个事件以及其基本库H3,Nitro是基于事件的。
// routes/index.ts
export default defineEventHandler((event) => {
return "<h1>Hello World</h1>";
});
文件结构应与下图相似。
使用以下命令启动开发服务器:
npm run dev
终端应显示以访问服务器的URL,如下图中:
输入浏览器中提供的URL时,我们有在Koud12
文件中写的返回mongodb
我们不会在本教程中详细介绍使用MongoDB创建数据库。
打开一个新指南,在MongoDB Atlas上创建一个帐户,然后在您已经与银行连接的string
时回到这里。
...
你回来了吗?以下安装棱镜!
安装Prisma
让我们使用Prisma作为我们的ODM,这是数据库和编程语言之间的翻译范围。
让我们使用以下命令安装棱镜作为开发依赖性:
npm install prisma --save-dev
不久之后,让我们使用以下命令实例化Prism文件:
npx prisma init --datasource-provider mongodb
您会意识到,我们项目的档案中存在变化,以前的命令创建了一个称为Koud14的文件夹和一个对应于应用程序环境设置的.env
文件。
文件结构必须看起来像下面的图:
在Koud15文件中将具有称为Koud17的属性,这是我们将连接字符串粘贴到MongoDB的地方,类似于下面的摘要:
// .env
DATABASE_URL="mongodb+srv://USERNAME:PASSWORD@HOST:PORT/DATABASE"
打开koud18文件,我们有一些自动插入Prism的信息,例如客户端(我们将在下一步中安装),数据库,MongoDB在我们的情况下以及一个导入我们的方差环境的URL将我们的API连接到云数据库。
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
在这里,我们还将与其他与其他银行相关的字段创建一个基本的书籍模型。让我们添加以下摘录có³doda:
model Book {
id String @id @default(auto()) @map("_id") @db.ObjectId
name String
isbn String @unique
description String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
-
model Book
-在这里,我们通知模式,我们将在关系银行中创建一个文档集合,创建一个表。 -
id String @id @default(auto()) @map("_id") @db.ObjectId
-每个mongoDB文档都有一个字符串类型,在行末尾表示 @ notes。这些笔记的范围从棱镜内的银行到银行。 - 我们声明字符串类型的名称,ISBN和描述属性,注意我们在ISBN字段中插入的
@unique
概念,表明无法重复此值,并且适用于每个文档。 - 不需要创建和更新的字段,但是很有趣的是,何时创建记录和更新记录,笔记是Prisma标准。
- 其他相关信息可以在documentação中找到。
安装Prisma客户端
Prisma客户端是负责管理数据库并基于我们在上一步中创建的模式生成SCIPT的PRISM的一部分。使用以下命令安装库:
npm install @prisma/client
安装库后,是时候生成我们项目的打字稿使用的特定提示,而每次修改架构,我们都必须运行命令
npx prisma generate dev
实例化Prisma客户
在我们的所有应用程序中,我们只能通过管理所有请求来拥有一个Prism客户。
在我们项目的根部和其中创建一个utils
文件夹,其中包含以下内容的prisma.ts
文件:
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
export { prisma };
创建API路由
基于事件的且借助基于文件的路由系统,Nitro与其他框架的架构组织略有不同。
在koud27文件夹中,然后创建api
文件夹和以下文件结构:
请注意,我们的全部请求http在文件中声明。
两个文件都将负责API中的同一URL,http://minhapi/api/books
,但一个带有整个GET
,另一个带有整个Koud31。
(了解有关母亲http的更多信息)[https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Methods]
从母亲的代码开始©All GET
:
// routes/api/books.get.ts
import { prisma } from "../../utils/prisma";
export default defineEventHandler(async (event) => {
const books = await prisma.book.findMany();
return books;
});
- 在第一行中,我们导入了我们在上一步中实例化的棱镜的客户。
- 很快,我们在整个Nitro路由上按模式导出H3
defineEventHandler
功能,Nitro将管理H3的导入H3,而无需明确声明。 /LI> -
defineEventHandler
功能接收了帕拉诺(Parano)的矮人功能,该功能展示了我们从帖子开始以来谈论的活动,当我们对整个帖子发表评论时,这将是更多。 - 作为矮人的功能,我们通过Parano是Asancron,veja mais sobre assincronismo no JS,我们定义了一个常数的
books
,我们希望我们的Prism客户端将通过findMany()
返回所有API书籍。 - 最后,我们将结果退还给请求我们API数据的客户。
// routes/api/books.post.ts
import { prisma } from "../../utils/prisma";
export default defineEventHandler(async (event) => {
const payload = await readBody(event);
const newBook = await prisma.book.create({ data: payload });
return newBook;
});
- 遵循与上一个标准结构相同的标准结构,但请注意,在常数
payload
中,我称之为另一个母亲©H3,并将我的事件作为parano传递。我们请求的所有数据都保存在事件中。在这种情况下,我们正在阅读根据请求发送的主体,并使用要注册的书的数据。 - 在常数
newBook
中,我们使用了母亲©Todacreate()
从Prisma插入数据库中,然后将其返回到下一行中。
入口,这是使用此堆栈非常简单的API的教程。也许我在其他帖子中回到这里,讨论本指南中遗漏的更多详细信息(更复杂的路线,错误处理,事件操纵,中间件...)