基于 Node.js + Koa 构建完整的 Web API 项目

主题内容:基于 Node.js + Koa 构建完整的 Web API 项目
目标框架:Node.js v14.15.4 (包含 npm 6.14.10)
开发工具:Visual Studio Code (VS Code)
开发平台:macOS Big Sur 11.1  /  Windows 10
开发人员:成长的小猪 Jason Song
背景描述:上一篇 基于Node.js构建完整服务端应用(创建 Node.js Web API 项目篇)  我们分别介绍了在 macOS Big Sur /  Windows 10 上创建 Node.js Web API 项目 和 创建项目目录结构(项目骨架),这一篇我们将介绍使用 Koa 框架

  1. 在项目中安装Koa包,在 VS Code 里打开集成的Terminal命令行终端窗口 快捷键 macOS (⌃ + `) / Windows (Ctrl + `),然后执行下命令安装
     
    npm install koa --save-prod   或者  cnpm install koa --save-prod

    基于 Node.js + Koa 构建完整的 Web API 项目_第1张图片

  2. 在“ jasonsoft-koa-server”项目根目录创建一个名为 app.js 的文件(初始化相关服务和注入相关中间件),然后我们导入 Koa 框架,下面是官方示例,采用的是“ CommonJS ”规范,使用如下
     
    const Koa = require('koa');
    const app = new Koa();
    
    app.use(async ctx => {
      ctx.body = 'Hello World';
    });
    
    app.listen(3000, ()=> {
      console.log(`[\x1B[36mRunning\x1B[0m] 服务已启动:http://localhost:3000`);
    });

    在 terminal 里执行 “ node app.js ”, Koa 顺利的启动起来了

    基于 Node.js + Koa 构建完整的 Web API 项目_第2张图片

  3. 我们的项目将会采用“ ES ”规范,让我们的项目支持 ES6/7/8/9 及更高版本的新特性和语法的支持,我们先将代码改成以下的样子

    /**
     * 初始化相关服务和注入相关中间件
     * 
     * Added by Jason.Song (成长的小猪) on 2021/01/31
     * CSDN: https://blog.csdn.net/jasonsong2008
     * GitHub: https://github.com/JasonSoft-Net
     */
    
    import Koa from 'koa';
    
    /** 初始化Koa */
    const app = new Koa();
    
    app.use(async ctx => {
      ctx.body = 'Hello World';
    });
    
    /** 监听指定端口,启动服务 */
    app.listen(3000, ()=> {
      console.log(`[\x1B[36mRunning\x1B[0m] 服务已启动:http://localhost:3000`);
    });

    然后在 terminal 里执行 “ node app.js ”,你会发现报错了,如下

    ➜  jasonsoft-koa-server git:(main) ✗ node app.js
    (node:33323) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
    (Use `node --trace-warnings ...` to show where the warning was created)
    /Users/jason/Projects/Node/jasonsoft-koa-server/app.js:9
    import Koa from 'koa';
    ^^^^^^
    
    SyntaxError: Cannot use import statement outside a module
        at wrapSafe (internal/modules/cjs/loader.js:979:16)
        at Module._compile (internal/modules/cjs/loader.js:1027:27)
        at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
        at Module.load (internal/modules/cjs/loader.js:928:32)
        at Function.Module._load (internal/modules/cjs/loader.js:769:14)
        at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
        at internal/main/run_main_module.js:17:47

    我们发现从上面的执行结果看,Node.js 当前的版本虽然是支持ES语法和特性, 需要我们在node package.json 配置"type": "module",配置了这个属性虽可以解决当前的问题,但上这个配置会影响没有按“ ES module ” 规范编写的包,当我们引用了 “ CommonJS ” 规范编写的包,也会报错误,可能会报如下的错误

    /Users/jason/Projects/Node/jasonsoft-koa-controller/example/app.js:18
      var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(ctx, next) {
                                                 ^
    
    ReferenceError: regeneratorRuntime is not defined
        at /Users/jason/Projects/Node/jasonsoft-koa-controller/example/app.js:7:1

    我将在下一篇介绍如何让我们的项目支持 ES6/7/8/9 及更高版本的新特性和语法,且向前兼容的处理方法
     

项目源码地址:https://github.com/JasonSoft-Net/jasonsoft-koa-server

上一篇 基于Node.js构建完整服务端应用(创建 Node.js Web API 项目篇)

下一篇 基于 Node.js + Koa 构建完整的 Web API (让项目支持 ES6/ES2015 及更高版本的新特性)

 

 如果此文对你有一点点帮助,请给一个赞哦;如果你对此文感兴趣,请关注我,后面将继续更新相关内容,查看我本人更多原创文章,请点击这里=>。

 

 

你可能感兴趣的:(Node.js,node.js,koa,node.js,Web,API,Koa,Web,API,Node,Koa,WebAPI)