Koa2服务端基本配置(持更)

基于Koa2在搭建本地服务器的模板说明

快速搭建一个服务器

项目初始化和安装

  • 初始化项目:yarn init,在根目录下执行,生成 package.json 文件
  • 安装Koa:yarn add koa,此时生成 yran.lock 文件 和 node_modules 目录

划分目录结构

1
2
3
4
5
6
7
8
9
10
├─.env  环境相关配置
├─package.json 描述项目以及项目所依赖的模块信息
├─yarn.lock
├─node_modules
├─src
| ├─main.js 入口文件
| ├─router 路由
| ├─app 全局、错误处理之类
| | ├─config.js
| | └index.js

这里的入口文件是要自己创建的,对应 package.json 文件中的 “main”

项目搭建

配置环境变量

安装dotenv第三方库,帮助将根目录下的 .env 文件的数据加载到环境变量

.env 文件中,我们可以自主配置域名、端口号,之后如果涉及到数据库操作,还可以在这里统一配置用户名、密码、数据库名称等。

1
2
3
// .env
APP_HOST=http://localhost
APP_PORT=8080
1
2
3
4
5
6
7
8
// app/config.js
const dotenv = require('dotenv');

dotenv.config();

module.exports = {
APP_PORT
} = process.env;

创建服务器

配置服务器

1
2
3
4
// app/index.js
const Koa = require('koa');
const app = new Koa();
module.exports = app;

入口文件直接导入配置好的服务器,并启动

1
2
3
4
5
6
7
8
// main.js
const app = require('./app')
const {
APP_PORT
} = require('./app/config')
app.listen(APP_PORT, () => {
console.log("服务器启动成功~_~");
})

安装开发依赖nodemon

便于在代码更新后自动重启node 应用程序,而无需手动操作。

1
yarn add nodemon

同时修改 package.json 文件

1
2
3
"scripts": {
"start": "nodemon ./src/main.js"
},

这时就只需要通过 yarn start 就可以启动项目,并且不需要手动重启获取更新了。

基本配置

常用的库

中间件/第三方库 说明
koa-router 路由配置
koa-cors 跨域配置

路由配置

安装路由中间件 koa-router,在 router 目录下新建路由文件,配置路由

1
2
3
4
5
6
7
8
9
10
11
12
13
// src/router/user.js
const Router = require('koa-router');
const userRouter = new Router({ prefix: '/upload'}) //设置路由前缀,完整请求路径就是 APP_HOST:APP_POST/upload 再拼接下面的 url

userRouter.get('/', (ctx, next) => {
ctx.response.body = "get Users"
})

userRouter.put('/', (ctx, next) => {
ctx.response.body = "put Users"
})

module.exports = router;

注册路由

1
2
3
4
5
6
7
8
9
10
// src/app/index.js
const Koa = require('koa');
const userRouter = require('./../router/user');
const app = new Koa();

// 调用.routes()来组装匹配好的路由,返回一个合并好的中间件,然后注册
app.use(userRouter.routes());
// allowedMethods方法用于判断某一个method是否支持
app.use(userRouter.allowedMethods({}))
module.exports = app;

如果有多个路由,就按这种方式连续注册。

跨域配置

安装中间件 koa-cors , 处理跨域问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// src/app/index.js
const Koa = require('koa');
const cors = require('koa-cors');

const app = new Koa();

// 使用 koa-cors 中间件处理跨域请求
app.use(cors({ // 指定一个或多个可以跨域的域名
origin: function (ctx) { return '*'; },
maxAge: 5, // 指定本次预检请求的有效期,单位为秒。
credentials: true, // 是否允许发送Cookie
allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], // 设置所允许的HTTP请求方法
allowHeaders: ['Content-Type', 'Authorization', 'Accept'], // 设置服务器支持的所有头信息字段
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] // 设置获取其他自定义字段
}))

module.exports = app;