使用node.js+koa搭建一个属于自己后端服务,用于前端请求测试

620 阅读3分钟

编码工具:vs-code

(一)环境基础

1、node.js下载与安装

下载地址:nodejs.cn/download/
官方文档:nodejs.cn/learn

2、依赖下载

npm i nodemon -g //全局安装nodemon,可以自动重启后端服务
npm init -y //初始化一个项目,会生成package.json的配置文件
npm i koa
npm i koa-body //解析请求和响应
npm i @koa/router //配置路由
npm i @koa/corsr //配置跨越

或者在package.json的"dependencies"配置项复制版本信息,在终端运行npm i,会自动安装所需的依赖

    "koa": "^2.13.4",
    "@koa/cors": "^3.3.0",
    "@koa/router": "^10.1.1",
    "koa-body": "^5.0.0"

(二) 服务搭建

新建一个app.js文件作为项目入口文件,使用node.js的核心模块搭建简单的网络服务

const http = require("http"); //网络模块

const port = 3000; //端口号

const server = http.createServer((req, res) => {
  // req= request 请求,res=response 响应
  {
    //自定义响应内容
    res.statusCode = 200; //响应状态码
    res.setHeader("Content-Type", "text/plain"); //响应头
    res.end("hello world!\n"); //响应内容
  }
});

server.listen(port, () => {
  console.log(`服务器运行在 http://localhost:${port}/`);
});

在终端命令行窗口:node app.js启动服务,在浏览器上可以通过 http://localhost:3000访问。

效果图.png

问题来了,接口有很多,怎么更好的管理。当然是使用koa来搭建服务。 koa官方文档:www.koajs.com.cn/#context

(*重要)使用koa搭建服务

构建文档目录

1.png

app.js为项目入口文件
router为配置请求接口的地方
controller为处理请求,返回用例数据的地方

1、app.js内容

const koa = require("koa");
const koaBody = require("koa-body");
const cors = require("@koa/cors");

const router = require("./router");

const app = new koa();

// 配置跨域
app.use(cors());

// 解析请求体内数据,get请求是默认的
app.use(
  koaBody({
    parsedMethods: ["POST", "DELETE", "PATCH", "PUT"],
  })
);

// 路由匹配
app.use(router.routes());

app.listen(3000, () => {
  console.log("run in http://localhost:3000");
});

2、router内容

2.1、router/index.js内容
/**
 * 1. 声明路由
 * 2. 聚合路由
 */

const Router = require("@koa/router");
const fs = require("fs");
const path = require("path");

const router = new Router();

let fileList = fs.readdirSync(__dirname);

for (const fileName of fileList) {
  if (fileName === "index.js") continue;
  let fileRoute = require(path.join(__dirname, fileName));
  router.stack.push(...fileRoute.stack);
}

module.exports = router;
2.2、router/user.js内容
const Router = require("@koa/router");
const userController = require("../controller/user");

const router = new Router();

router
  //用户登录和查询接口
  .post("/api/login", userController.login)
  .get("/api/userInfo", userController.getInfo);

module.exports = router;

3、controllerr内容

3.1、controllerr/user.js内容
class User {
  // 登录
  login(ctx) {
    //登录是post请求,从ctx.request.body中解构后端需要的参数
    // delete、patch、put请求也是从ctx.request.body中解构后端需要的参数
    let { username, password } = ctx.request.body;

    {
      //添加验证,从数据库读取数据等等操作,后端逻辑书写区域
    }

    //通过验证后返回请求数据,ctx.body={内容都是可以自定义的}
    return (ctx.body = {
      code: 200,
      msg: "登录成功",
      data: {
        username: "admin",
        password: "123456",
      },
    });
  }

  //查询用户信息
  getInfo(ctx) {
    //查询是get请求,从ctx.query中解构后端需要的参数
    let { username } = ctx.query;

    {
      //添加验证,从数据库读取数据等等操作,后端逻辑书写区域
    }

    //通过验证后返回请求数据,ctx.body={内容都是可以自定义的}
    return (ctx.body = {
      code: 200,
      msg: "查询成功",
      data: {
        username: "admin",
        password: "123456",
      },
    });
  }
}

module.exports = new User();

根据实际需要修改router/user.js和controllerr/user.js;其它模块创建类似的文件。

4、test.http文件可以模拟发送请求(需要在vs-code中安装REST Client插件)

### 查询
GET http://localhost:3000/api/userInfo?username=admin HTTP/1.1

### 登录

POST http://localhost:3000/api/login HTTP/1.1
Content-Type: application/json

{
    "username":"admin",
    "password":"123456"
}

测试结果
1、发送get请求 2.png
2、发送post请求 3.png 3、get请求可以使用浏览器发送,在地址栏输入url

4.png

总结

node.js+koa搭建一个属于自己的后端服务如此方便!