手动搭建koa+ts项目框架(mysql篇)

2023-12-13 15:03:39

前言

本文基于手动搭建koa+ts项目框架(路由篇)新增mysql使用

在Node.js中连接数据库的方式可以有多种,但通常情况下,我们会在应用程序启动时创建数据库连接,然后在整个应用程序生命周期中重用该连接。

一次性创建数据库连接的优点是可以减少每次请求时的开销,因为连接到数据库需要花费一定的时间。如果每次请求都创建新的连接,可能会拖慢响应时间并增加服务器的负载。

相反,如果我们在应用程序启动时创建连接,并在需要时重复使用该连接,可以提高性能并减少不必要的开销。通常,连接池是常见的实现方式,它可以管理连接的创建和重用,确保连接的可靠性和高效性。

所以,一般建议在Node.js中创建一个数据库连接,然后在整个应用程序生命周期中重用该连接,而不是每次调用接口都创建一个新的连接。


一、安装mysql

npm i -S mysql2

还需安装koa-bodyparser插件,方便解析请求值(需在使用路由前使用)

npm i -S koa-bodyparser
and
npm i -D @types/koa-bodyparser

使用和不使用的区别如下图红框部分
在这里插入图片描述

二、引入mysql并使用

  • ./src/data-base/config.ts文件
export const config = {
    DATABASE: 'user', //数据库名称
    USERNAME: 'root', //mysql用户名
    PASSWORD: '12345', //mysql密码
    PORT: 3306, //mysql端口号
    HOST: 'localhost' //服务器ip
}
  • ./src/data-base/index.ts文件
import mysql from 'mysql2'
import { config } from './config'

// 创建数据库的连接
const connection = mysql.createConnection({
    host: config.HOST,
    user: config.USERNAME,
    password: config.PASSWORD,
    database: config.DATABASE,
    port: config.PORT
});

export function mysqlQuery(sql: string) {
    return new Promise((resolve, reject) => {
        connection.query(sql, (err, results) => {
            if (err) {
                reject(err)
            } else {
                resolve(results)
            }
        });
    })
}
  • ./src/routes/index.ts文件引入数据查询
import Koa from 'koa'
import { mysqlQuery } from '../data-base'
const router = require('koa-router')()
router.get('/', async (ctx: Koa.Context) => {
  ctx.body = 'Hello Index'
})

router.post('/login',async(ctx: Koa.Context)=>{
  // const {userName, password} = ctx.request.body as {userName: string, password: string}
  const sql = `select * from user where user_name = 'admin' and pass_word = '123456'`;
  const result = await mysqlQuery(sql);
  ctx.body= {
      code:'200',
      msg:'登录成功'
  }
})

export default router
  • ./src/index.ts文件新增koa-bodyparser中间件
import Koa from "koa";

import logger from 'koa-logger'
import bodyparser from 'koa-bodyparser'

import index from "./routes/index"
import users from "./routes/user"

const app = module.exports = new Koa();

// 中间件
app.use(logger())
app.use(bodyparser({ // 需在使用路由前引入,否则不生效
	enableTypes: ['json', 'form', 'text'],
}))

// 日志记录
app.use(async (ctx, next) => {
    const start = new Date()
    await next()
    const ms = Number(new Date()) - Number(start)
    console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})

// 接口路由
app.use(index.routes())
app.use(users.routes())

if (!module.parent) app.listen(3000);

执行npm run dev开启服务,使用postman调用/login接口

在这里插入图片描述


总结

TS版本需使用mysql2插件,mysql只支持js版本的
还需安装koa-bodyparser插件,方便解析请求值(或者使用koa-body

如有启发,可点赞收藏哟~

文章来源:https://blog.csdn.net/weiCong_Ling/article/details/134931204
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。