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 erfahren2. 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" }
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);
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);
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 });
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(); };
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 = '<html><body>' + '<p> userinfo: ' + userInfo + '</p>' + '</body></html>'; ctx.response.type ='text/html'; ctx.response.body = html; }; var saveUserinfo = (ctx, next) => { const requestString = ctx.data; //TODO数据处理 Console.log(requestString); }; module.exports = { 'GET /getUserinfo': getUserinfo, 'POST /saveUserinfo': saveUserinfo };
2.5
[userService.js]
Verarbeitet und kapselt die von ***Dao.js erhaltenen Daten und gibt sie an den Controller zurück
const userDao = require('./../dao/userDao.js'); var getUserById = async (userId) => { var users = userDao.getUserById(userId); var responseContent = ''; for(let user of users) { reaponseContent += '姓名:' + user.name + ' |'; reaponseContent += '年龄:' + user.age + ' |'; reaponseContent += '身高:' + user.height + '<br />'; } return responseContent; } module.exports = { getUserById : getUserById };
2.6. Datenerfassung
[userDao.js]
Erhalten Sie Benutzerdaten durch Abfrage eingehender Parameter
const mysql = require('./../utils/mysqlUtil.js'); var getUserById = async (userId) => { let mysqlOptions = { sql : 'select * from table_user where user_id = ?', args : [userId] }; var users = await mysql.execQuery(mysqlOptions); if(users.length == 0) { return null; } else { return users; } }; module.exports = { getUserById : getUserById };
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('mysql'); const config = require('./../../config/config.local.js'); var connectionPool = mysql.createPool({ 'host' : config.database.host, 'port':config.database.port, 'user' : config.database.user, 'password' : config.database.password, 'database' : config.database.database, 'charset': config.database.charset, 'connectionLimit': config.database.connectionLimit, 'supportBigNumbers': true, 'bigNumberStrings': true }); var release = connection => { connection.end(function(error) { if(error) { console.log('Connection closed failed.'); } else { console.log('Connection closed succeeded.'); } }); }; 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['sql']; var args = sqlOptions['args']; if(!args) { var query = connection.query(sql, (error, results) => { if(error) { console.log('Execute query error !'); throw error; } resolve(results); }); } else { var query = connection.query(sql, args, function(error, results) { if(error) { console.log('Execute query error !'); throw error; } resolve(results); }); } connection.release(function(error) { if(error) { console.log('Mysql connection close failed !'); throw error; } }); }); }).then(function (chunk) { return chunk; }); return results; }; module.exports = { release : release, execQuery : execQuery }
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!