当前位置: 首页 > news >正文

koa搭建服务器(一)

最近有个需求需要使用到koa搭建服务器并编写接口对数据库进行增删改查,因此写一篇博客记录这段时间的收获。

一、新建koa项目

(一)安装koa及其相关依赖

npm i koa
npm i koa-router// 中间件,用于匹配路由
npm i koa-bodyparser// 中间件,用于解析请求body
npm i koa-static// 中间件,用于设置静态资源目录

(二)搭建koa服务器

// 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 messagesswitch (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即可启动服务器

http://www.lryc.cn/news/210711.html

相关文章:

  • qt-C++笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度
  • github搜索技巧探索
  • [ACTF2020 新生赛]Include
  • Go 实现插入排序算法及优化
  • LuatOS-SOC接口文档(air780E)--max30102 - 心率模块
  • 设计模式(2)-创建型模式
  • elasticsearch一些重要的配置参数
  • raft和zab算法的区别
  • Arthas生成火焰图命令报错汇总
  • 【PyQt学习篇 · ⑤】:QWidget - 鼠标操作
  • 2-多媒体数据压缩国际标准-Part3
  • 使用Go模块进行依赖管理
  • 人工智能与航天技术的融合:未来发展的新趋势
  • 私有云:【11】win10安装Agent客户端组件
  • 什么是程序化交易
  • 企业如何安全跨国传输30T文件数据
  • 【Linux】centos安装配置及远程连接工具的使用
  • 算法|每日一题|掷骰子等于目标和的方法数|动态规划
  • Java架构师软件工程全流程
  • 深度学习中Transformer的简单理解
  • Java架构师系统安全
  • Stable Diffusion 图生图+ControlNet list index out of range
  • SylixOS BSP开发(七)
  • 多媒体应用设计师 第15章 多媒体素材的制作和集成
  • CentOS和Ubuntu命令行方式配置静态IP
  • 服务器快速申请免费SSL证书_2023年10月29日可用
  • ChatGPT专业术语及有效使用方法概述
  • ffmpeg 视频转图片 图片集转视频
  • Zabbix安装与部署
  • kafka代码示例