我正在建立我的后端项目,并已从Sequelize切换到Prisma,以实现更强大的查询。浏览Prisma的文档很难,但我觉得我已经涵盖了所有的基础。
基本上,我创建了生成器客户端和数据源数据库,并运行
prisma db pull
生成模型,然后运行
prisma generate
以更新prisma客户端。我的客户端启用了基本日志记录,验证它是否已连接到数据库。
const prisma = new PrismaClient({
log: ['query', 'info', 'warn', 'error'],
})
prisma:info Starting a mssql pool with 9 connections.
prisma:info Performing a TLS handshake
prisma:warn Trusting the server certificate without validation.
prisma:info TLS handshake successful
prisma:warn Turning TLS off after a login. All traffic from here on is not encrypted.
prisma:info Database change from 'RiffTheoryScales' to 'master'
prisma:info Changed database context to 'RiffTheoryScales'.
prisma:info SQL collation changed to windows-1252
prisma:info Microsoft SQL Server version 1443102736
prisma:info Packet size change from '4096' to '4096'
prisma:query SELECT [dbo].[Scales].[ID], [dbo].[Scales].[name]
WHERE [dbo].[Scales].[ID] = @P1
[]
我的服务器看起来像这样
const prisma = new PrismaClient({
log: ['query', 'info', 'warn', 'error'],
})
const app = express()
app.use(cors());
app.use(express.json())
// ROUTES
app.use('/api/scales', router);
const server = app.listen(3000, () =>
console.log(`RUNNING ON PORT 3000`),
)
export default prisma
我的架构如下
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlserver"
url = env("DATABASE_URL")
}
model Scales {
ID Int @id(map: "PK__Scales__3214EC27E22038C6") @default(autoincrement())
name String @db.NVarChar(100)
}
我的基本测试路线如下
import { Router } from "express" ;
import getScaleByName from '../controllers/prismacontrol.js'
const router = Router();
router.get("/name", getScaleByName);
export default router
import prisma from "../servertwo.js";
const getScaleByName = async (req, res) => {
try {
const scales = await prisma.scales.findMany()
console.log(scales)
if (!scales) {
res.status(400).json({
success: false,
message: 'No scales found!',
});
} else {
res.status(200).json({
scales,
success: true,
message: 'All scales returned'
})
}
} catch (error) {
console.log(error)
res.status(400).json({
success: false,
message: `ERROR: ${error.message}`
});
}
}
export default getScaleByName
我以为我已经涵盖了所有的基础,但如果有人看到遗漏或编码建议,请指出。甚至可能是一些简单的事情。。。