• 使用koa搭建服务器(一)


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

    一、新建koa项目

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

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

    (二)搭建koa服务器

    1. // app.js
    2. const http = require('http');
    3. const Koa = require('koa');
    4. const bodyParser = require('koa-bodyparser');
    5. const router = require('./routes/index');
    6. const static = require("koa-static");
    7. const config = require('./config');
    8. module.exports = async () => {
    9. // 创建koa应用
    10. const app = new Koa();
    11. //设置静态资源目录,用于存放前端代码build后的内容
    12. app.use(static('public'));
    13. // 注册中间件
    14. app.use(bodyParser());
    15. // 路由,业务入口
    16. app.use(router.routes(), router.allowedMethods());
    17. // 启动服务
    18. const server = http.createServer(app.callback());
    19. server.listen(config.serverPort);
    20. server.on('error', onServerError);
    21. server.on('listening', () => {
    22. logger.info(`服务启动于端口 ${config.serverPort}`);
    23. });
    24. };
    25. function onServerError(error) {
    26. if (error.syscall !== 'listen') {
    27. throw error;
    28. }
    29. const bind = typeof config.serverPort === 'string' ? `Pipe ${config.serverPort}` : `Port ${config.serverPort}`;
    30. // handle specific listen errors with friendly messages
    31. switch (error.code) {
    32. case 'EACCES':
    33. logger.fatal(`${bind} 需要更高的权限`);
    34. process.exit(1);
    35. case 'EADDRINUSE':
    36. logger.fatal(`${bind} 端口已被使用,请检查是否开启了多个服务。`);
    37. process.exit(1);
    38. default:
    39. throw error;
    40. }
    41. }

    一般在项目中,接口可以分为好多不同的模块的,如果把所有的接口请求处理函数,都放在上面的 app.js,文件就会显得非常庞大且杂乱。所以:

    1、新增一个routes文件夹,专门用来存放路由

    1. // routes/index.js
    2. const createRouter = require('koa-router');
    3. const Home = require('../controllers/Home');
    4. const router = createRouter();
    5. router.get('/', async (ctx) => {
    6. ctx.body = 'helloWorld';
    7. });
    8. router.post('/test', Home.test;
    9. module.exports = router;

    2、新增一个controllers文件夹,把接口的处理函数统一放在这里

    1. // controllers/index.js
    2. const test = async (ctx, next) => {
    3. ctx.body = '测试'
    4. }

    (三)启动服务器

    直接在app.js的当前文件夹下下node app.js即可启动服务器

  • 相关阅读:
    Linux学习记录——삼십일 socket编程---TCP套接字
    Scala的简单语法介绍
    Win11的两个实用技巧系列之电脑死机解决办法
    夜班睡岗离岗识别检测系统
    RK3568驱动指南|第五期-中断-第47章 工作队列传参实验
    SpringSecurity框架【详解】
    Flink 报错:写入数据到流加载失败
    vuex模块化,以及如何借助mapActions,mapMutations生成对应的方法
    滚珠螺母的生产流程
    《uni-app》一个非canvas的飞机对战小游戏实现-requestAnimationFrame详解
  • 原文地址:https://blog.csdn.net/m0_68634366/article/details/134091348