使用node创建服务并输出所有接口供测试分析(中)

289 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文主要介绍如何使用node启动一个服务,效果等同于使用nginx、apache等启动程序,在网络相通的情况下能够被其他服务器访问。并输出所有接口供测试人员分析使用。

编写代码创建服务

以启动isui代码为例,isui文件夹下为工程打包后的前端代码。

打包注意点:由于我们期望访问的路径是localost:8082/isui, 因此打包需要配置需要配置公共路径。

  • webpack配置publicPath:'/isui'
  • isui项目使用的是VuePress,只需配置选项base:'/isui/'

创建config.json文件,为文件后缀名与其content-type匹配文件

创建start.js文件,改文件为node入口执行文件

工程目录结构如下:

image.png

start.js

// 引入 http 模块
let http = require("http");

// 引入 fs 模块
let fs = require("fs");

// 引入 url 模块
let url = require("url");

// 引入 path 模块
let path = require("path");
http
  .createServer((req, res) => {
    // 获取响应路径
    let pathName = url.parse(req.url).pathname;
    data[0].data.push([pathName]);
    // 默认加载路径
    if (pathName == "/isui") {
      // 默认加载的首页
      pathName = "isui/index.html";
    }

    // 获取文件的后缀名
    let extName = path.extname(pathName);

    // 过滤 /favicon.ico 的请求
    /**
     * 访问地址是:http://localhost:3000/?userName=jsliang&userAge=23
     * 如果你执行 console.log(req.url),它将执行两次,分别返回下面的信息:
     * /  ?userName=jsliang&userAge=23
     * /  /favicon.ico
     * 这里为了防止重复执行,所以排除 req.url == /favicon.ico 的情况
     */
    if (pathName != "/favicon.ico") {
      // 获取 08_WebService 下的 index.html
      fs.readFile("./" + pathName, (err, data) => {
        // 如果不存在这个文件
        if (err) {
          console.log("404 Not Found!");
          fs.readFile("./isui/404.html", (errorNotFound, dataNotFound) => {
            if (errorNotFound) {
              console.log(errorNotFound);
            } else {
              res.writeHead(200, {
                "Content-Type": "text/html; charset='utf-8'",
              });
              // 读取写入文件
              res.write(dataNotFound);
              // 结束响应
              res.end();
            }
          });
          return;
        }
        // 返回这个文件
        else {
          // 获取文件类型
          let ext = getExt(extName);
          console.log(ext);

          // 设置请求头
          res.writeHead(200, {
            "Content-Type": ext + "; charset='utf-8'",
          });
          // 读取写入文件
          res.write(data);
          // 结束响应
          res.end();
        }
      });
    }
  })
  .listen(8082);

// 获取后缀名
getExt = (extName) => {
  // readFile 是异步操作,所以需要使用 readFileSync
  let data = fs.readFileSync("./config.json");
  let ext = JSON.parse(data.toString());
  return ext[extName];
};

config.json 通过后缀名获取对应的文件类型。

image.png

启动服务

在终端输入命令:node start.js 在浏览器中输入localhost:8082/isui,首页就出来了。

image.png