>  기사  >  웹 프론트엔드  >  Node는 Koa2를 사용하여 웹 프로젝트를 구축합니다.

Node는 Koa2를 사용하여 웹 프로젝트를 구축합니다.

小云云
小云云원래의
2018-01-15 13:10:572180검색

이 글은 주로 Koa2를 사용하여 웹 프로젝트를 구축하는 방법을 소개합니다. 편집자는 꽤 좋다고 생각해서 지금 공유하고 참고용으로 제공하겠습니다. 편집자를 따라 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다.

Node.js의 인기가 높아짐에 따라 다양한 프레임워크가 속속 등장하기 시작했고, 점차 서버 요청을 처리하는 시나리오에 Node.js가 적용되기 시작했습니다. 웹 프로젝트 구축을 위한 프레임워크(express, koa, koa2, egg 등)도 나타나기 시작했습니다. 물론 품질을 이해하려면 소스 코드를 직접 읽어야 합니다. 이 글에서는 소스코드는 다루지 않고 초보자들이 Koa2의 기본적인 사용법을 간략하게 이해할 수 있도록 안내할 것입니다. 댓글을 통해 누구나 서로 소통하고 배울 수 있습니다.

참고: koa2는 ES7 구문을 사용하므로 사용 시 Node 버전을 최신 버전으로 업그레이드하시기 바랍니다. 자세한 소스 코드 정보는 git의 koajs/koa를 참조하세요

1. 프로젝트 디렉터리 구조

2. 패키지 구조 파일

[ package.json]

{
 "name": "weixin-node-koa",
 "version": "1.0.0",
 "description": "node.js with koa2",
 "private": true,
 "dependencies": {
  "koa": "^2.0.0",
  "koa-router": "^7.0.0",
  "mysql":"2.13.0"
 },
 "scripts": {
  "start": "node app.js"
 },
 "engines": {
  "node": ">=6.0.0"
 },
 "author": "Fly",
 "license": "CENTERM"
}

2.2. 항목 파일 시작

[app.js]

const Koa = require('koa');
const app = new Koa();
const router2controller = require('./app/router2controller.js');
const config = require('./config/config.local.js');

app.use(router2controller());
app.listen(config.port);
console.log("Server started and listen on port " + config.port);

요청한 메시지 본문이 XML 형식인 경우 다음 코드를 추가할 수 있습니다. 자동으로 메시지를 구문 분석합니다(참고: 인용된 koa-xxx 버전은 koa2와 일치해야 합니다)


const Koa = require('koa');
const app = new Koa();
const router2controller = require('./app/router2controller.js');
const config = require('./config/config.local.js');

//start接收到的xml数据请求单独解析存储
const xmlParser = require('koa-xml-body');
app.use(xmlParser()).use((ctx,next) => {
  ctx.data = ctx.request.body;
  return next();
});
//end

app.use(router2controller());
app.listen(config.port);
console.log("Server started and listen on port " + config.port);

코드에서 router2controller.js 파일이 도입된 것을 볼 수 있습니다. 이 파일은 전면에서 라우팅 프로세스입니다. 특정 처리 방법에 대한 요청 종료


2.3. 라우터 파일

[router2controller.js]이 클래스는 컨트롤러 폴더의 파일을 자동으로 스캔하여 요청 매핑을 개별적으로 구성할 필요가 없습니다.

koa-router는 다음과 같은 방법을 제공합니다 ]


***Controller.js는 특정 요청 정보를 처리하고 데이터를 반환하는 데 사용되며, userController.js는 사용자 정보를 얻기 위해 GET 요청을 처리하고, 사용자 정보를 저장하기 위해 POST 요청을 처리합니다


router
 .get('/', async (ctx,next) => {
  this.body = 'Hello World!';
 })
 .post('/users', async (ctx,next) => {
  //TODO
 })
 .put('/users/:id', async (ctx,next) => {
  //TODO
 })
 .del('/users/:id', async (ctx,next) => {
  //TODO
 });

2.5. 데이터 처리


[userService.js]


는 ***Dao.js에서 얻은 데이터를 처리하고 캡슐화합니다. 컨트롤러로 돌아가기

const fs = require('fs');
const router = require('koa-router')();

function addMapping(router, mapping) {
  for (var url in mapping) {
    if (url.startsWith('GET ')) {
      var path = url.substring(4);
      router.get(path, mapping[url]);
      console.log(`register URL mapping: GET ${path}`);
    } else if (url.startsWith('POST ')) {
      var path = url.substring(5);
      router.post(path, mapping[url]);
      console.log(`register URL mapping: POST ${path}`);
    } else if (url.startsWith('PUT ')) {
      var path = url.substring(4);
      router.put(path, mapping[url]);
      console.log(`register URL mapping: PUT ${path}`);
    } else if (url.startsWith('DELETE ')) {
      var path = url.substring(7);
      router.del(path, mapping[url]);
      console.log(`register URL mapping: DELETE ${path}`);
    } else {
      console.log(`invalid URL: ${url}`);
    }
  }
}

function addControllers(router, dir) {
  fs.readdirSync(__dirname + '/' + dir).filter((f) => {
    return f.endsWith('.js');
  }).forEach((f) => {
    console.log(`process controller: ${f}...`);
    let mapping = require(__dirname + '/' + dir + '/' + f);
    addMapping(router, mapping);
  });
}

module.exports = function (dir) {
  var controllersDir = dir || 'controller';
  addControllers(router, controllersDir);
  return router.routes();
};

2.6 데이터 수집


[userDao.js]


들어오는 매개변수를 요청하여 사용자 데이터를 가져옵니다

const userService = require('./../service/userService.js');

var getUserinfo = (ctx, next) => {
  let query = ctx.query;
  let userId = query.id;
  let userInfo = userService.getUserById(userId);

  let html = &#39;<html><body>&#39;
    + &#39;<p> userinfo: &#39; + userInfo + &#39;</p>&#39;
    + &#39;</body></html>&#39;;
  ctx.response.type =&#39;text/html&#39;;
  ctx.response.body = html;
};

var saveUserinfo = (ctx, next) => {
  const requestString = ctx.data;
  //TODO数据处理
  Console.log(requestString);
};

module.exports = {
  &#39;GET /getUserinfo&#39;: getUserinfo,
  &#39;POST /saveUserinfo&#39;: saveUserinfo
};

2.7. 데이터베이스 작업


[ mysqlUtil.js]


데이터베이스 연결 풀 제어, 연결 설정 및 해제 관리, Dao가 시작한 데이터베이스 작업 요청 실행이 포함됩니다. ㅋㅋㅋ nodejs에서

위 내용은 Node는 Koa2를 사용하여 웹 프로젝트를 구축합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.