koa搭建node服務

介紹

使用koa搭建node服務 並鏈接mongodb返回前端數據
git https://gitee.com/wjj0720/koa...

項目初始化

首先保證你的node環境已經就緒
  • 一、建立項目文件夾前端

    建立文件夾test,在文件夾中shift+右鍵 在此處運行命令行
    運行 npm init --y
  • 二、 安裝依賴node

    npm i koa koa-body koa-static koa-cors

建立服務

// server.js
/*
 * 一、在項目文件中建立一個server.js文件
 * 二、在項目跟目錄運行 node server.js
 * 三、瀏覽器地址輸入 http://127.0.0.1:3001/  返回 your server run seccess
 */
const Koa = require("koa");

const app = new Koa();

// ctx表示一次對話的上下文(包括 HTTP 請求和 HTTP 回覆)
app.use(ctx => {
  ctx.body = "your server run seccess"
})

// 監聽3001端口
app.listen(3001, () => {
  console.log("server run on 127.0.0.1:3001");
});

路由使用

/*
 * 一、建立routers文件夾 文件夾下的每一個目錄都將是一個訪問的處理
 * 二、routers文件夾 建立一個demo文件夾並擁有index.js
 * 三、在routers文件夾下建立routers.js 用戶集中路由
 * 目錄結構
  -server.js
  -routers
    -routers.js
    -demo
      -index.js
  -router.js
*/

// ----server.js 文件 ----
const Koa = require("koa");
const koaBody = require("koa-body");
const static = require('koa-static')
//const cors = require('koa-cors')

// 引入router建立好的
let router = require("./router.js");

const app = new Koa();

// 解析post請求體
app.use(koaBody());

// 設置跨域 用不用插件均可
app.use(async (ctx, next) => {
  ctx.set("Access-Control-Allow-Origin", "*");
  return next();
});
// app.use(cors())

// 路由掛載
app.use(router.routes());

// 靜態文件處理
app.use(static(path.join(__dirname)))


// 監聽3001端口
app.listen(3001, () => {
  console.log("server run on 127.0.0.1:3001");
});
// -------server.js 結束----------

// ------- router.js -----
let Router = require("koa-router");
let routers = require("./routers/routers.js");

let router = new Router();

routers.forEach(r => {
  router.all(r.path, r.handle)
});

module.exports = router;
//  ------ server.js  結束 ------

// ------ routers/routers.js  start-----
let demo = require('./demo/index.js')
let test = require('./test/index.js')

module.exports = [
  demo,
  test
]
// ------ routers/routers.js  end -----


// ------ routers/demo/index.js  start -----

module.exports = {
  path: "/demo/returnsomething",
  async handle(ctx, next) {
    // 拿到請求輸入
    let params = ctx.request.body;
    
    // 業務邏輯處理
    console.log(params);

    // 返回前端數據
    ctx.body = { res: "SUCCESS", data: '', code: 2000 };
  }
};

// ------ routers/demo/index.js  end -----

// node server 訪問 http://127.0.0.1:3001//demo/returnsomething

mongodb 鏈接

/*
   * 一、首先咱們在server.js同級目錄建立utils目錄 並建立connect.js 用公共方法的封裝
  */
  // --- utils/connect.js---
  // 安裝依賴 npm i mongodb assert
  const MongoClient = require("mongodb").MongoClient;
  const assert = require("assert");

  // Connection URL mongo服務地址
  const url = "mongodb://localhost:27017";

  // Database Name 確保mongo中有test庫
  const dbName = "test";

  // 公共的鏈接方法
  const connect = (tableName, callback) => {
    MongoClient.connect(
      url,
      { useNewUrlParser: true },
      function(err, client) {
        assert.equal(null, err);

        const db = client.db(dbName);
        callback(db.collection(tableName));
        client.close();
      }
    );
  };
  // 封裝一個向mongo插入多條數據的方法
  exports.insertMany = (tableName, condition, params) => {
    return new Promise((resolve, reject) => {
      connect(tableName, collection => {
        collection.insertMany(condition, params, (err, result) => {
            if (err) {
              console.log(err);
              reject();
            } else {
              resolve(result);
            }
        });
      });
    });
  };
  // 封裝一個查找數據庫的方法
  exports.findMany = (tableName, condition) => {
    return new Promise((resolve, reject) => {
      connect(
        tableName,
        collection => {
          collection.find(condition).toArray((err, result) => {
            if (err) {
              console.log(err);
              reject();
            } else {
              resolve(result);
            }
          });
        }
      );
    });
  };
  // ------ end -------

  // 在路由中調用
  // ---- routers/dome/index.js ---- 
  const { findMany } = require("../../utils/connect");
  module.exports = {
    path: "/servers/addapi",
    async handle(ctx, next) {
      let params = ctx.request.body;
      
      // 查找數據庫 返回值 參數:代表, 條件
      let res = await findMany("user", {});
      console.log(res);

      ctx.body = { res: "SUCCESS", data: res, code: 2000 };
    }
  };
相關文章
相關標籤/搜索