具有明确和prismadb的身份验证
#node #prisma #jwt #express

我们将使用什么

表达

这是一家Nodejs书店,它使超级简单的REST服务器。卡车,它使我们能够做出想要的选择,对于那些想学习节点的人来说,这是一个很好的出发点。

一个ORM

,我只是只列出球的SQL请求,而只是向我的ORM订购东西,然后将我能在SQL请求中转换为可以的。

永远不会再喊出这种东西:

SELECT *
FROM table
WHERE condition
GROUP BY expression
HAVING condition
{ UNION | INTERSECT | EXCEPT }
ORDER BY expression
LIMIT count
OFFSET start

Prisma

说到ORM,Prisma是最现代和易于使用的Prisma之一。它提供了模式的决定(我的用户,我的汽车...等的嘴巴)直觉。
他扮演迁移,这将我的图表猛击在基础上而不是所需的SQL请求。

JSON网络令牌

jwt是猜测身份验证的一种方式,这是今天使用的最多的,因为由于像我这样的无聊阵线,我们在额头和背面之间有一个序列(两个休息,不同的服务器)突然突然使用了更多的问题曲奇饼。基本上,我们通过一个代码(一种代码)(眨眼都可以识别我的服务器)。
这是一个神秘的句子,背部将能够加密,并且客户可以通过谨慎地保存永远不要向任何人展示,至少只要有效。

项目初始化

在我的终端中:

mkdir levideur # Parce que je vais ce que je veux
cd levideur

我们初始化标准类型项目(因为打字稿很好)

npm init -y
npm install typescript ts-node @types/node --save-dev

必须添加此文件,还必须tsconfig.json

{
  "compilerOptions": {
    "sourceMap": true,
    "outDir": "dist",
    "strict": true,
    "lib": ["esnext"],
    "esModuleInterop": true
  }
}

现在,我可以安装prisma

npm install prisma --save-dev

我们可以亲密的Prisma:

npx prisma init --datasource-provider sqlite

我采用SQLITE漫画,因为它在设置中更快地安装了任何东西,但仍然是SQL。

MON PREMIER模式

图是拒绝给定的口的一种方法。

prisma/schema.prisma文件中,我补充说:

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User    @relation(fields: [authorId], references: [id])
  authorId  Int
}

既然我已经伸展了基地的桌子,我准备在给定的Abse中猛烈抨击此信息:

npx prisma migrate dev --name init

很好!我们准备好使用我们的基础。

我相信一个main.ts文件:

// main.ts
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

async function main() {
  const user = await prisma.user.create({
    data: {
      name: 'Alice',
      email: 'alice@prisma.io',
    },
  })
  console.log(user)
}

main()
  .then(async () => {
    await prisma.$disconnect()
  })
  .catch(async (e) => {
    console.error(e)
    await prisma.$disconnect()
    process.exit(1)
  })

在我的航站楼中,一切都起作用:

npx ts-node main.ts

Image description

镍! ð¥

代码在这里:Repo du videur

放置服务器

在我的终端中:

npm i express jsonwebtoken cors
npm i -D morgan
  • CORS :允许服务器为Hée的域外呼叫。
  • Morgan :倒入LES日志
import express from "express"
import morgan from "morgan"
import cors from "cors"
import { PrismaClient } from "@prisma/client"

const PORT = 1234

// Initialisation de Express 4
const app = express()

// Activation de CORS pour les CORS...
app.use(cors())
// Activation de Morgan pour les logs
app.use(morgan("tiny"))
// Activation du raw (json)
app.use(express.json())
// Activation de x-wwww-form-urlencoded

app.use(express.urlencoded({ extended: true }))

// Initialisation du client Prisma
const prisma = new PrismaClient()

// Requete GET /
app.get("/", async (req, res) => {
  const users = await prisma.user.findMany()
  res.send(users)
})

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}.`)
})

我突然启动服务器;

npx ts-node main.ts

我访问(http://localhost:1234/),很好:

Image description