最近有个需求需要使用到koa搭建服务器并编写接口对数据库进行增删改查,因此写一篇博客记录这段时间的收获。
- npm i koa
- npm i koa-router// 中间件,用于匹配路由
- npm i koa-bodyparser// 中间件,用于解析请求body
- npm i koa-static// 中间件,用于设置静态资源目录
- // app.js
- const http = require('http');
- const Koa = require('koa');
- const bodyParser = require('koa-bodyparser');
- const router = require('./routes/index');
- const static = require("koa-static");
- const config = require('./config');
-
- module.exports = async () => {
- // 创建koa应用
- const app = new Koa();
-
- //设置静态资源目录,用于存放前端代码build后的内容
- app.use(static('public'));
-
- // 注册中间件
- app.use(bodyParser());
-
- // 路由,业务入口
- app.use(router.routes(), router.allowedMethods());
-
-
- // 启动服务
- const server = http.createServer(app.callback());
- server.listen(config.serverPort);
- server.on('error', onServerError);
- server.on('listening', () => {
- logger.info(`服务启动于端口 ${config.serverPort}`);
- });
- };
-
- function onServerError(error) {
- if (error.syscall !== 'listen') {
- throw error;
- }
-
- const bind = typeof config.serverPort === 'string' ? `Pipe ${config.serverPort}` : `Port ${config.serverPort}`;
-
- // handle specific listen errors with friendly messages
- switch (error.code) {
- case 'EACCES':
- logger.fatal(`${bind} 需要更高的权限`);
- process.exit(1);
- case 'EADDRINUSE':
- logger.fatal(`${bind} 端口已被使用,请检查是否开启了多个服务。`);
- process.exit(1);
- default:
- throw error;
- }
- }
一般在项目中,接口可以分为好多不同的模块的,如果把所有的接口请求处理函数,都放在上面的 app.js,文件就会显得非常庞大且杂乱。所以:
1、新增一个routes文件夹,专门用来存放路由
- // routes/index.js
- const createRouter = require('koa-router');
- const Home = require('../controllers/Home');
-
- const router = createRouter();
-
- router.get('/', async (ctx) => {
- ctx.body = 'helloWorld';
- });
-
- router.post('/test', Home.test;
-
- module.exports = router;
2、新增一个controllers文件夹,把接口的处理函数统一放在这里
- // controllers/index.js
- const test = async (ctx, next) => {
- ctx.body = '测试'
- }
直接在app.js的当前文件夹下下node app.js即可启动服务器