Koa2 & TypeScript 前端项目实战

Koa2 是一个基于 Node.js 平台的 web 应用框架,它使用 async/await 的方式处理异步操作,代码简洁易读,并且适合编写 RESTful API。而 TypeScript 是一种为 JavaScript 添加了静态类型检查的编程语言,它能确保高质量的代码,并且提高了代码的可维护性。在本文中,将介绍如何使用 Koa2 和 TypeScript 开发一个简单的前端项目。

环境搭建

在开始之前,需要先安装 Node.js 和 Typescript 依赖:

# 安装 node.js
$ brew install node

# 安装 Typescript
$ npm install -g typescript

接下来,创建一个新的文件夹,使用 npm 初始化一个新的项目:

$ mkdir koa2-typescript-app
$ cd koa2-typescript-app
$ npm init -y

安装必需的依赖:

$ npm install koa koa-router koa-bodyparser koa-cors typescript nodemon --save-dev

其中,koa 是 Koa2 的核心依赖,koa-router 是用于路由管理的依赖,koa-bodyparser 是用于解析 POST 请求的依赖,koa-cors 是用于处理 CORS 的依赖,typescript 是 TypeScript 的编译器,nodemon 是用于文件变化自动重启服务的依赖。

启动项目

在项目根目录下,创建一个 src 文件夹,并创建一个 index.ts 文件。在 index.ts 文件中,添加一个简单的 server 实现:

import Koa from 'koa';

const app = new Koa();

app.use(async (ctx, next) => {
  ctx.body = 'Hello, welcome to koa2 typescript app!';
  await next();
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

package.json 中,添加一个 start 命令来启动服务:

{
  "scripts": {
    "start": "nodemon --exec ts-node src/index.ts"
  }
}

运行 npm start,访问 http://localhost:3000,你会看到 "Hello, welcome to koa2 typescript app!" 的字样。

路由管理

我们能通过 Koa2 的 ctx.requestctx.response 进行请求和响应的处理。为了更方便地管理路由,我们使用 koa-router 库来帮我们处理路由。在 src 目录下新建一个 routes 目录,并新建一个 hello.ts 文件来处理 /hello 路由:

import { Context } from 'koa';

const hello = (ctx: Context) => {
  ctx.body = { message: 'Hello, welcome to koa2 typescript app' };
};

export { hello };

然后,在 src/index.ts 文件中,import koa-router,并在 app 实例上 use 上路由:

import Koa from 'koa';
import Router from 'koa-router';
import bodyParser from 'koa-bodyparser';
import cors from '@koa/cors';

import { hello } from './routes/hello';

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

app.use(bodyParser());
app.use(cors());

router.get('/hello', hello);

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

运行 npm start,访问 http://localhost:3000/hello,你将看到:

{
  "message": "Hello, welcome to koa2 typescript app"
}

数据库连接

在这边假设你已经有一个 Mongodb 数据库,并且已经安装了 mongoose。Mongoose 是一个使用 Node.js 的异步驱动程序 MongoDB 的对象建模工具,提供了简单的 CRUD 操作和数据验证等功能。

我们在 src 目录下,新建一个 models 目录,并创建一个 User.ts 文件:

import mongoose, { Document, Model } from 'mongoose';

export interface IUser extends Document {
  name: string;
  email: string;
}

const userSchema = new mongoose.Schema({
  name: String,
  email: String,
});

const User: Model<IUser> = mongoose.model<IUser>('User', userSchema);

export default User;

接下来,在 src/index.ts 中进行数据库连接:

import Koa from 'koa';
import Router from 'koa-router';
import bodyParser from 'koa-bodyparser';
import cors from '@koa/cors';
import mongoose from 'mongoose';

import { hello } from './routes/hello';
import User from './models/User';

mongoose.connect('mongodb://localhost/usersdb', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

mongoose.connection.on('error', (err) => {
  console.error(`Mongoose connection error: ${err}`);
});

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

app.use(bodyParser());
app.use(cors());

router.get('/hello', hello);

router.post('/users', async (ctx: Context) => {
  const user = new User(ctx.request.body);
  const savedUser = await user.save();

  ctx.body = savedUser;
});

app.use(router.routes());
app.use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

我们在 /users 的路由下添加了 POST 请求,请求中我们将会解析出请求体,并创建一个 User 模型,然后将其存储到数据库中。

运行 npm start,并且使用 curl 进行 POST 请求:

$ curl -X POST \
  http://localhost:3000/users \
  -H 'Content-Type: application/json' \
  -d '{"name": "Bob", "email": "bob@example.com"}'

你将会得到返回值:

{
  "_id": "5f1a218a5236703c1f3d546f",
  "name": "Bob",
  "email": "bob@example.com",
  "__v": 0
}

总结

在本文中,我们介绍了

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65953d15eb4cecbf2d970362


纠错反馈