Heim > Web-Frontend > js-Tutorial > Node verwendet Koa2, um Webprojekte zu erstellen

Node verwendet Koa2, um Webprojekte zu erstellen

小云云
Freigeben: 2018-01-15 13:10:57
Original
2193 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Methode vor, Koa2 zum Erstellen von Webprojekten zu verwenden. Der Herausgeber findet sie recht gut, daher werde ich sie jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.

Da Node.js immer beliebter wird, entstehen nach und nach verschiedene Frameworks, und Node.js wird nach und nach in Szenarien verwendet, in denen serverseitige Anforderungen verarbeitet werden. Es tauchten auch Frameworks zum Erstellen von Webprojekten auf – Express, Koa, Koa2, Egg usw. Um ihre Qualität zu verstehen, müssen Sie natürlich immer noch den Quellcode selbst lesen. Dieser Artikel bezieht sich nicht auf den Quellcode, sondern führt nur Anfänger dazu, die grundlegende Verwendung von Koa2 kurz zu verstehen. Jeder ist willkommen, in den Kommentaren zu kommunizieren und voneinander zu lernen.

Hinweis: koa2 verwendet die ES7-Syntax. Aktualisieren Sie daher bitte die Node-Version auf die neueste Version, wenn Sie sie verwenden. Ausführlichere Informationen zum Quellcode finden Sie unter koajs/koa auf git, um

1 Projektverzeichnisstruktur

zu erfahren

2. Code-Logik-Analyse

2.1. Paketstrukturdatei

[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"
}
Nach dem Login kopieren

2.2. Starteintragsdatei

[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);
Nach dem Login kopieren

Bei Bedarf liegt der Nachrichtentext im XML-Format vor. Sie können den folgenden Code hinzufügen, um die Nachricht automatisch zu analysieren (beachten Sie, dass die angegebene Version von koa-xxx koa2 entsprechen muss)


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);
Nach dem Login kopieren

Aus dem Code wurde eine router2controller.js-Datei eingeführt. Diese Datei vervollständigt den Routing-Prozess von Front-End-Anfragen zu bestimmten Verarbeitungsmethoden

Router-Datei

[router2controller.js]

Diese Klasse scannt automatisch die Dateien im Controller-Ordner, um die Anforderungszuordnung zu laden. Es ist nicht erforderlich, jede Anfrage einzeln zu konfigurieren

koa -router bietet nativ die folgenden Methoden:


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
 });
Nach dem Login kopieren

Die Implementierungsmethode zum automatischen Scannen des Controller-Pakets ist wie folgt


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();
};
Nach dem Login kopieren

2.4. Controller

[userController.js]

***Controller.js wird zur Verarbeitung spezifischer Anfragen verwendet Informationen und Rückgabedaten. userController.js verarbeitet GET-Anfragen zum Abrufen von Benutzerinformationen, POST-Anfragen zum Speichern von Benutzerinformationen


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
};
Nach dem Login kopieren

2.5

[userService.js]

Verarbeitet und kapselt die von ***Dao.js erhaltenen Daten und gibt sie an den Controller zurück


const userDao = require(&#39;./../dao/userDao.js&#39;);

var getUserById = async (userId) => {
  var users = userDao.getUserById(userId);
  var responseContent = &#39;&#39;;
  for(let user of users) {
    reaponseContent += &#39;姓名:&#39; + user.name + &#39; |&#39;;
    reaponseContent += &#39;年龄:&#39; + user.age + &#39; |&#39;;
    reaponseContent += &#39;身高:&#39; + user.height + &#39;<br />&#39;;
  }
  return responseContent;
}

module.exports = {
  getUserById : getUserById
};
Nach dem Login kopieren

2.6. Datenerfassung

[userDao.js]

Erhalten Sie Benutzerdaten durch Abfrage eingehender Parameter


const mysql = require(&#39;./../utils/mysqlUtil.js&#39;);

var getUserById = async (userId) => {
  let mysqlOptions = {
    sql : &#39;select * from table_user where user_id = ?&#39;,
    args : [userId]
  };

  var users = await mysql.execQuery(mysqlOptions);
  if(users.length == 0) {
    return null;
  } else {
    return users;
  }
};

module.exports = {
  getUserById : getUserById
};
Nach dem Login kopieren

2.7. Datenbankbetrieb

[mysqlUtil.js]

Beinhaltet die Steuerung des Datenbankverbindungspools und den Verbindungsaufbau und Release-Management sowie die Ausführung von Datenbankbetriebsanforderungen, die von Dao initiiert wurden


const mysql = require(&#39;mysql&#39;);
const config = require(&#39;./../../config/config.local.js&#39;);

var connectionPool = mysql.createPool({
  &#39;host&#39; : config.database.host,
  &#39;port&#39;:config.database.port,
  &#39;user&#39; : config.database.user,
  &#39;password&#39; : config.database.password,
  &#39;database&#39; : config.database.database,
  &#39;charset&#39;: config.database.charset,
  &#39;connectionLimit&#39;: config.database.connectionLimit,
  &#39;supportBigNumbers&#39;: true,
  &#39;bigNumberStrings&#39;: true
});

var release = connection => {
  connection.end(function(error) {
    if(error) {
      console.log(&#39;Connection closed failed.&#39;);
    } else {
      console.log(&#39;Connection closed succeeded.&#39;);
    }
  });
};

var execQuery = sqlOptions => {
  var results = new Promise((resolve, reject) => {
      connectionPool.getConnection((error,connection) => {
      if(error) {
        console.log("Get connection from mysql pool failed !");
        throw error;
      }

      var sql = sqlOptions[&#39;sql&#39;];
      var args = sqlOptions[&#39;args&#39;];

      if(!args) {
        var query = connection.query(sql, (error, results) => {
          if(error) {
            console.log(&#39;Execute query error !&#39;);
            throw error;
          }

          resolve(results);
        });
      } else {
        var query = connection.query(sql, args, function(error, results) {
          if(error) {
            console.log(&#39;Execute query error !&#39;);
            throw error;
          }

          resolve(results);
        });
      }

      connection.release(function(error) {
        if(error) {
          console.log(&#39;Mysql connection close failed !&#39;);
          throw error;
        }
      });
    });
  }).then(function (chunk) {
    return chunk;
  });

  return results;
};

module.exports = {
  release : release,
  execQuery : execQuery
}
Nach dem Login kopieren

Verwandte Empfehlungen:

10 Empfohlene Artikel über koa2

Tutorial zur Verwendung des Koa2-Frameworks in NodeJS6

Teilen von Beispiel-Tutorials zur Verwendung des Koa2-Frameworks in NodeJS

Das obige ist der detaillierte Inhalt vonNode verwendet Koa2, um Webprojekte zu erstellen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage