当前位置: 首页 > 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/210057.html

相关文章:

  • echarts的柱状图的重叠和堆叠实现两个柱体的显示和之前的差值显示
  • 泛积木-低代码 使用攻略
  • 红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远控介绍及界面编写
  • 机器学习(五)如何理解机器学习三要素
  • 【计算机视觉】3D视觉
  • 策略路由和路由策略
  • [动态规划] (一) LeetCode 1137.第N个泰波那契数
  • SystemVerilog语法中,在Class中引用层次化信号
  • 磁盘的结构(磁道,扇区,盘面,柱面,物理地址)
  • uni-app集成uni-simple-router,报错:Uncaught ReferenceError: ROUTES is not defined
  • 几个常用的nosql数据库的操作方式
  • 如何使用 nvm-windows 这个工具来管理你电脑上的Node.js版本
  • 公司电脑禁用U盘的方法
  • Elasticsearch 7.X版本常用语法语句
  • Python分享之数学与随机数 (math包,random包)
  • Linux 基本语句_8_C语言_文件控制
  • 博通BCM575系列 RDMA 网卡驱动 bnxt_re 分析(一)
  • ExcelPatternTool 开箱即用的Excel工具包现已发布!
  • Navicat for MySQL 视图创建使用方法
  • 计算机视觉的相机选型
  • 实体店做商城小程序如何
  • sql-50练习题0-5
  • Flutter框架实现登录注册功能,不连接数据库
  • 持续集成部署-k8s-部署利器-Helm
  • 替换所有的问号
  • NCCL后端
  • 【API篇】十、生成Flink水位线
  • 【Javascript】弹出框
  • NSS [鹤城杯 2021]EasyP
  • mysql用户及权限管理(InsCode AI 创作助手)