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测试

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

Logo

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

更多推荐