本文基于手动搭建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
)
如有启发,可点赞收藏哟~