Koa搭建本地服务

237 阅读2分钟

前言:实现一个koa服务启动,后续进行对项目的mock数据链接,进行本地的代码调试,达到快速实现页面效果,前后端协同

1.下载koa包

npm install -D koa

主要实现的使用的核心方法:使用的node的os模块,找到具体的网络地址,进行项目的本地服务转发

var os = require("os");
// 返回一个对象,该对象包含已分配了网络地址的网络接口
var ifaces = os.networkInterfaces(); 
/*
 * @title: 使用Koa搭建Node服务
 * @description: 描述
 */

const Koa = require("koa");
const router = require("koa-router")();
// 引入koa-bodyparser中间件,这个中间件可以将post请求的参数转为json格式返回
const bodyParser = require('koa-bodyparser');
// 使用中间件后,可以用ctx.request.body进行获取POST请求参数,中间件自动给我们解析为json

var os = require("os");
// 返回一个对象,该对象包含已分配了网络地址的网络接口
var ifaces = os.networkInterfaces(); 

const PORT = 8008;
let ipAddress = "0.0.0.0";
// 获取对象地址
Object.keys(ifaces).forEach(function(ifname) {
    var alias = 0;
    ifaces[ifname].forEach(function(iface) {
        if ("IPv4" !== iface.family || iface.internal !== false) {
            // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
            return;
        }
        if (alias >= 1) {
            // this single interface has multiple ipv4 addresses
            // console.log(ifname + ":" + alias, iface.address);
            ipAddress = iface.address;
        } else {
            // this interface has only one ipv4 adress
            // console.log(ifname, iface.address);
            ipAddress = iface.address;
        }
        ++alias;
    });
});
console.log("ipAddress",ipAddress);

// 新建服务器
const app = new Koa();
app.use(bodyParser());
app.use(async (ctx, next) => {
  ctx.set("Access-Control-Allow-Origin", "*");  // 规定允许访问该资源的外域 URI

  console.log(`服务 ${ctx.request.method} ${ctx.request.url}...`);
  await next();
});
router.get("/", async (ctx, next) => {
  ctx.response.body = {
    a: 1,
    b: "123",
  };
});

// 重定向
router
    .all("/", (ctx, next) => {
        const url = `http://${ipAddress}:${PORT}/api/queryNumList`;
        ctx.body = `
            <h1>url error</h1>
            <p>url的正确姿势如:
                <a href="${url}" target="_blank">${url}</a>
            </p>
            <p>please check your url!!!</p>
        `;
    })

// 例子
router.get('/api/employees', async (ctx,  next)  => {
    ctx.response.body = {
    status:true,
    data:[
        { projecttype: "项目订单实施", totalCount: "26" },
        { projecttype: "售前", totalCount: "2" },
        { projecttype: "项目订单实施", totalCount: "2" },
        { projecttype: "后评估", totalCount: "23" },
        { projecttype: "项目订单实施", totalCount: "26" },
        { projecttype: "运维", totalCount: "62" },
        { projecttype: "试运营", totalCount: "2" }
   ],
    msg:'获取数据成功'
    }
    });
    app.use(router.routes()).use(router.allowedMethods());
app.listen(9000, () => {
  console.log(`node服务已经启动, 请访问 localhost:9000`);
});