从零开始用koa + mysql + typescript 搭建一个简单服务
用koa+mysql+typescript搭建服务
1.初始化项目
新建一个项目文件夹myKoa,然后在该目录下执行命令:
npm init
安装项目依赖,先安装koa;注意区分koa和@types/koa:
npm install koa
npm install @types/koa -D
接着安装typescript和ts-node,并在package.json文件中scripts添加dev;
"scripts": {
"build": "tsc",
"dev": "nodemon --watch src -e ts,tsx --exec ts-node src/index.ts",
"test": "echo \"Error: no test specified\" && exit 1"
},
初始化tsconfig配置,输入tsc命令:
tsc --init
根据需要配置:
具体配置表可参考https://www.tslang.cn/docs/handbook/tsconfig-json.html;
{
"compilerOptions": {
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"emitDecoratorMetadata": true,
"module": "CommonJS",
"target": "es2018",
"noImplicitAny": true,
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist", // TS文件编译后会放入到此文件夹内
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
}
},
"include": [
"src/**/*"
]
}
2. hello world
创建src/index.ts文件,代码如下:
import Koa from 'koa';
const app = new Koa();
app.use(async ctx => {
ctx.body = 'Hello World';
});
app.listen(3000);
启动服务
npm run dev
在浏览器输入127.0.0.1:3000访问服务;
3.创建路由
首先安装路由依赖:使用koa-router及其@types/koa-router
npm install koa-router
npm install @types/koa-router -D
新建src/controller/user.ts
import { Context } from 'koa';
export default class UserController {
public static async listUsers(ctx: Context) {
ctx.body = 'listUsers';
}
}
新建src/routes.ts文件
import Router from 'koa-router'
import UserController from './controllers/user'
const router = new Router()
router.get('/user', UserController.listUsers)
export default router
在src/index.ts中注册路由:
import router from './routes';
app.use(router.routes()).use(router.allowedMethods());
用浏览器或postman测试,输入127.0.0.1:3000/user访问服务;
4.连接数据库
安装数据库相关依赖,mysql reflect-metadata typeorm
npm install mysql
npm install reflect-metadata
npm install typeorm
typeorm官方文档:https://typeorm.io/
新建src/entity/user.ts,创建数据模型定义
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: string;
@Column()
username: string;
@Column()
age: number;
@Column()
sex: string;
@Column({ select: false })
password: string;
}
新建数据库配置文件src/db/config.ts,填写数据库ip地址、端口号、用户名、密码等关键信息
import { User } from "../entity/user";
export const mysqlLogin = {
host: "127.0.0.1",
port: 3306,
username: "用户名",
password: "密码",
database: "库名称",
entities: [User],
synchronise: true,
logging: false
}
在src/index.ts中初始化连接
import Koa from 'koa';
import router from './routes';
import { DataSource } from 'typeorm';
import { mysqlLogin } from './db/config';
const app = new Koa();
const AppDataSource = new DataSource({
...mysqlLogin,
type: 'mysql'
});
AppDataSource.initialize().then(() => {
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000);
}).catch((err) => {
console.error("Error during Data Source initialization", err)
});
export { AppDataSource };
修改src/controllers/user.ts,读取数据库
import { Context } from "koa";
import { User } from "../entity/user";
import { AppDataSource } from "../index";
export default class UserController {
public static async listUsers(ctx: Context) {
const userReposity = AppDataSource.getRepository(User);
const users = await userReposity.find();
ctx.status = 200;
ctx.body = users;
}
}
再次运行项目,用浏览器或者postman测试

此时就能看到数据库中的数据;

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)