Maison > interface Web > js tutoriel > Node utilise Koa2 pour créer des projets Web

Node utilise Koa2 pour créer des projets Web

小云云
Libérer: 2018-01-15 13:10:57
original
2215 Les gens l'ont consulté

Cet article présente principalement la méthode de nœud utilisant Koa2 pour créer des projets Web. L'éditeur pense que c'est plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un œil. J'espère que cela pourra aider tout le monde.

À mesure que Node.js devient de plus en plus populaire, divers frameworks commencent à émerger les uns après les autres, et Node.js est progressivement utilisé dans des scénarios où les requêtes côté serveur sont traitées. Des frameworks pour construire des projets Web ont également commencé à apparaître - express, koa, koa2, egg, etc. Bien sûr, pour comprendre leur qualité, il faut toujours lire soi-même le code source. Cet article n'impliquera pas le code source, mais amènera seulement les débutants à comprendre brièvement l'utilisation de base de Koa2. Tout le monde est invité à communiquer et à apprendre les uns des autres dans les commentaires.

Remarque : koa2 utilise la syntaxe ES7, veuillez donc mettre à niveau la version de Node vers la dernière version lorsque vous l'utilisez. Pour des informations plus détaillées sur le code source, vous pouvez accéder à koajs/koa sur git pour apprendre

1. Structure du répertoire du projet

.

2. Analyse logique du code

2.1. Fichier de structure du package

[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"
}
Copier après la connexion

2.2. Fichier d'entrée de démarrage

[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);
Copier après la connexion

si demandé Le corps du message est au format XML Vous pouvez ajouter le code suivant pour analyser automatiquement le message (à noter que la version de koa-xxx citée doit correspondre à koa2)


<🎜. >
const Koa = require(&#39;koa&#39;);
const app = new Koa();
const router2controller = require(&#39;./app/router2controller.js&#39;);
const config = require(&#39;./config/config.local.js&#39;);

//start接收到的xml数据请求单独解析存储
const xmlParser = require(&#39;koa-xml-body&#39;);
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);
Copier après la connexion
À partir du code Un fichier router2controller.js a été introduit. Ce fichier complète le processus de routage des requêtes frontales vers des méthodes de traitement spécifiques

Fichier du routeur .

[router2controller.js]

Cette classe analysera automatiquement les fichiers dans le dossier du contrôleur pour charger le mappage des requêtes. Il n'est pas nécessaire de configurer chaque requête individuellement


koa. -router fournit nativement les méthodes suivantes :



router
 .get(&#39;/&#39;, async (ctx,next) => {
  this.body = &#39;Hello World!&#39;;
 })
 .post(&#39;/users&#39;, async (ctx,next) => {
  //TODO
 })
 .put(&#39;/users/:id&#39;, async (ctx,next) => {
  //TODO
 })
 .del(&#39;/users/:id&#39;, async (ctx,next) => {
  //TODO
 });
Copier après la connexion
La méthode d'implémentation d'analyse automatique du package du contrôleur est la suivante



const fs = require(&#39;fs&#39;);
const router = require(&#39;koa-router&#39;)();

function addMapping(router, mapping) {
  for (var url in mapping) {
    if (url.startsWith(&#39;GET &#39;)) {
      var path = url.substring(4);
      router.get(path, mapping[url]);
      console.log(`register URL mapping: GET ${path}`);
    } else if (url.startsWith(&#39;POST &#39;)) {
      var path = url.substring(5);
      router.post(path, mapping[url]);
      console.log(`register URL mapping: POST ${path}`);
    } else if (url.startsWith(&#39;PUT &#39;)) {
      var path = url.substring(4);
      router.put(path, mapping[url]);
      console.log(`register URL mapping: PUT ${path}`);
    } else if (url.startsWith(&#39;DELETE &#39;)) {
      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 + &#39;/&#39; + dir).filter((f) => {
    return f.endsWith(&#39;.js&#39;);
  }).forEach((f) => {
    console.log(`process controller: ${f}...`);
    let mapping = require(__dirname + &#39;/&#39; + dir + &#39;/&#39; + f);
    addMapping(router, mapping);
  });
}

module.exports = function (dir) {
  var controllersDir = dir || &#39;controller&#39;;
  addControllers(router, controllersDir);
  return router.routes();
};
Copier après la connexion

2.4. Controller

[userController.js]

***Controller.js est utilisé pour traiter une demande spécifique. informations et données de retour. userController.js gère les requêtes GET pour obtenir des informations sur les utilisateurs, les requêtes POST pour enregistrer les informations sur les utilisateurs



const userService = require(&#39;./../service/userService.js&#39;);

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
};
Copier après la connexion

2.5.

[userService.js]

Traite et encapsule les données obtenues à partir de ***Dao.js et les renvoie au contrôleur



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
};
Copier après la connexion

2.6. Acquisition de données

[userDao.js]

Obtenez les données utilisateur en demandant les paramètres entrants



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
};
Copier après la connexion

2.7. Fonctionnement de la base de données

[mysqlUtil.js]

Inclut le contrôle du pool de connexions à la base de données et l'établissement de la connexion. et gestion des versions, et exécution des demandes d'opération de base de données initiées par Dao



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
}
Copier après la connexion
Recommandations associées :


10 articles recommandés sur koa2

Tutoriel sur l'utilisation du framework koa2 dans nodejs6

Tutoriel de partage sur l'utilisation du framework koa2 dans nodejs

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal