Express 项目环境搭建 -- 11. 连接 Sqlite

Express 有第三方链接数据库的中间件,但是因为中间件使用的是依赖注入,就没有编辑器提示,所以更好的方式是使用单例模式,引入模块的方式来实现 Express 连接数据库。

Node.js 有很多 ORM 模块方便我们操作数据库

这里我们使用 Prisma 来连接 SQLite

Prisma

初始化

1
2
npm i --save prisma@latest
npm i --save @prisma/client@latest

初始化 prisma 项目

1
npx prisma init

运行后将会在根目录下生成一个prisma/schema.prisma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
provider = "prisma-client-js"
output = "../.prisma-client" // 将客户端代码生成到根目录下并在 git 中忽略
}

datasource db {
provider = "sqlite"
url = "file:db/database.db" // 当前文件夹下的 db/database.db
}

/// 用户表
model user {
/// The ID of the user
id String @id @default(cuid())
/// The name of the user
nickname String?
/// The email of the user
email String?
/// The password of the user
password String?
/// The phone number of the user
phone String?
/// The account of the user
account String?
/// createdAt
createdAt DateTime @default(now())
/// updatedAt
updatedAt DateTime @default(now()) @updatedAt()

@@unique([email])
@@unique([phone])
@@unique([account])
@@index([email, password])
@@index([phone, password])
@@index([account, password])
}

单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// utils/db/prisma.js
const { PrismaClient } = require("../../.prisma-client");

class Prisma {
static init() {
if (!this.instance) {
this.instance = new PrismaClient();
}
return this.instance;
}
}

module.exports = Prisma.init();

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// src/routes/v1/auth.js
const express = require("express");
const router = express.Router();

// info 数据库单例
const prisma = require("../../../utils/prisma");

router.post("", async function(req, res, next) {
try {
const { email, password } = req.body;

// info 查找用户
const users = await prisma.users.findFirst({
where: {
email,
password: await md5Slat(password)
},
select: {
id: true,
name: true,
email: true,
create_time: true
}
});
} catch (error) {
next(error);
}
});

npm 脚本配置

1
2
3
4
5
6
7
8
"scripts": {
"start": "node ./bin/www", // 正式环境
"dev": "npm run pgs && nodemon ./bin/www", // 开发环境
"p.gs": "prisma generate", // 重新生成客户端代码
"p.updb": "prisma migrate dev", // 同步数据库
"p.s": "prisma studio", // stuido
"lint": "eslint --fix ." // 格式化
}

gitignore 配置

因为使用的是 SQLite ,数据库在本地,所以想忽略掉本地数据库。且客户端代码也不提交代 git 中,运行前生成就行。

1
2
3
# prisma
.prisma-client
prisma/db

Express 项目环境搭建 -- 11. 连接 Sqlite
https://bubao.github.io/posts/a5dc76f1.html
作者
一念
发布于
2022年3月7日
许可协议