项目准备

Typescript安装Koa

npm install koa koa-bodyparser koa-router koa-static --save # 添加koa 注意这里没有-dev
npm install @types/koa @types/koa-router @types/koa-bodyparser @types/koa-static --save-dev # 添加koa ts相关

删掉 operations.ts 和 index.ts ,新建项目入口文件 app.ts ,输入一下内容:

import path from 'path'
import Koa from 'koa'
import Router from 'koa-router'
import koaStatic from 'koa-static'
import bodyParser from 'koa-bodyparser'

const app = new Koa()
const router = new Router()

// Middlewares
app.use(bodyParser())
app.use(koaStatic(path.join(__dirname, '../public')))

// Routes
router.get('/api', async (ctx, next) => {
  ctx.body = {
    code: 0,
    msg: 'success',
    data: {
    }
  }
  await next()
})
app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Koa started')
})

package.json 修改成 "dev": "nodemon --watch src/**/*.ts --exec \"ts-node\" src/app.ts"

npm run dev 之后 浏览器访问http://localhost:3000/api,即可看到内容。

在这里发现了一个很赞的点,终于不用写 const Koa = require('koa') ,已经跟Es6语法一致了!!!

OK http服务已经跑起来了。

安装mongodb

社区版(免费)下载地址:https://www.mongodb.com/try/download/community 具体安装步骤查看视频,或者自行网上搜索。

mongodb可视化管理工具:https://robomongo.org/

安装typeorm

npm install typeorm reflect-metadata mongodb --save # 安装typeorm、mongodb相关依赖

查看详细文档 https://typeorm.io/

一、测试链接是否生效,新建文件 src\entity\Post.ts

import { Column, Entity, ObjectID, ObjectIdColumn } from 'typeorm'

@Entity()
export default class Post {

  @ObjectIdColumn()
  id: ObjectID;

  @Column()
  title: string;

  @Column()
  text: string;

}
  • Eslint提示:对修饰器的实验支持功能在将来的版本中可能更改。在 "tsconfig" 或 "jsconfig" 中设置 "experimentalDecorators" 选项以删除此警告。打开 tsconfig.json 将“experimentalDecorators”和“emitDecoratorMetadata”选项打开。
  • Eslint提示:属性“id”没有初始化表达式,且未在构造函数中明确赋值。修改成如下代码 id!: ObjectID;

二、 app.ts 修改成如下代码

import path from 'path'
import Koa from 'koa'
import Router from 'koa-router'
import koaStatic from 'koa-static'
import bodyParser from 'koa-bodyparser'

import 'reflect-metadata'
import { createConnection, ConnectionOptions } from 'typeorm'
import Post from './entity/Post'

const options: ConnectionOptions = {
  type: 'mongodb',
  name: 'mymongodb',
  host: 'localhost',
  port: 27017,
  username: '',
  password: '',
  database: 'comments',
  synchronize: true,
  entities: [
    __dirname + '/entity/*.{ts, js}'
  ],
  useUnifiedTopology: true,
  logging: true
};

createConnection(options).then(async connection => {
  let post = new Post()
  post.title = '我的标题'
  post.text = '我不想说'
  let postRepository = connection.getRepository(Post)

  postRepository
      .save(post)
      .then(post => console.log("Post has been saved: ", post))
      .catch(error => console.log("Cannot save. Error: ", error))
  

  const app = new Koa()
  const router = new Router()

  // Middlewares
  app.use(bodyParser())
  app.use(koaStatic(path.join(__dirname, '../public')))

  // Routes
  router.get('/api', async (ctx, next) => {
    ctx.body = {
      code: 0,
      msg: 'success',
      data: {
      }
    }
    await next()
  })
  app.use(router.routes()).use(router.allowedMethods())

  app.listen(3000, () => {
    console.log('Koa started')
  })
}).catch((error: any) => console.log('TypeORM connection error: ', error))

出现 Post has been saved:  Post { title: '我的标题', text: '我不想说', id: 5fb0b527fb27b517e0d63c7b } 证明数据插入成功。

三、去数据库验证下 打开mongo.exe,依次输入

show dbs
use comments
show tables
db.post.find({}).pretty()

即可看到刚刚插入的数据。

到此基本的依赖都已经安装完成,下一步就是考虑怎么在业务逻辑中学习使用Typescript。

![Typescript完整开发环境](videos/3.mp4)

使用之前,建议去浏览一遍以下文档,不喜欢英文版,可以自行搜索中文版: