基于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
| APP_HOST=http: APP_PORT=8080
|
1 2 3 4 5 6 7 8
| const dotenv = require('dotenv');
dotenv.config();
module.exports = { APP_PORT } = process.env;
|
创建服务器
配置服务器
1 2 3 4
| const Koa = require('koa'); const app = new Koa(); module.exports = app;
|
入口文件直接导入配置好的服务器,并启动
1 2 3 4 5 6 7 8
| const app = require('./app') const { APP_PORT } = require('./app/config') app.listen(APP_PORT, () => { console.log("服务器启动成功~_~"); })
|
安装开发依赖nodemon
便于在代码更新后自动重启node 应用程序,而无需手动操作。
同时修改 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
| const Router = require('koa-router'); const userRouter = new Router({ prefix: '/upload'})
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
| const Koa = require('koa'); const userRouter = require('./../router/user'); const app = new Koa();
app.use(userRouter.routes());
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
| const Koa = require('koa'); const cors = require('koa-cors');
const app = new Koa();
app.use(cors({ origin: function (ctx) { return '*'; }, maxAge: 5, credentials: true, allowMethods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], allowHeaders: ['Content-Type', 'Authorization', 'Accept'], exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'] }))
module.exports = app;
|