A Koa, criada pela equipe expressa original, está comprometida em se tornar uma estrutura da web menor, mais forte e mais expressiva. Usando o KOA para escrever aplicativos da Web, combinando diferentes geradores, você pode eliminar a função de retorno de chamada duplicada e complicada e melhorar e melhorar bastante a eficiência do tratamento de erros comuns. A KOA não vincula nenhum middleware nos métodos do kernel, fornece apenas uma biblioteca leve e elegante de funções, facilitando a redação de aplicativos da Web.
Instale Koa
O KOA depende de um ambiente de nós que suporta o gerador, ou seja, a versão do nó deve ser 0,11.9 ou superior, caso contrário, não será executada.
Use NPM:
$ npm install koa
Ou selecione Instalar globalmente:
$ npm install -g koa
Exemplo
Aqui está um exemplo simples de koa:
var koa = requer ('koa'); var app = koa (); // loggerapp.use (function *(next) {var start = new Date; rendimento a seguir; var ms = new Date - start; console.log (' %s %s - %s', this.method, this.url, ms);}); Mundo ';}); App.Listen (3000);Ao contrário das funções normais, as funções do gerador são declaradas como função*. Funções declaradas com esse rendimento de suporte a palavras -chave. O uso e o significado do rendimento serão discutidos mais adiante.
Executar koa
Ao executar o KOA, você precisa ser executado no modo -Harmony. Por conveniência, você pode definir o nó como o alias para iniciar o modo Harmony por padrão:
Nó de alias = 'Nó -Harmony'
Dessa forma, você pode usá -lo diretamente ao executar o JS relacionado.
Cascading
Este é um conceito relativamente abstrato. O middleware Koa está em cascata de uma maneira muito tradicional, que é o que é chamado em cascata aqui.
No desenvolvimento anterior do Node, o uso frequente de retornos de chamada não foi conveniente para mostrar a lógica complexa de código. Em Koa, podemos escrever middleware verdadeiramente expressivo. Comparado com o método do Connect para implementar o middleware, a abordagem de Koa não é simplesmente entregar o controle ao middleware após o middleware até que o programa termine. O KOA executa o código como um clipe de papel. Quando o usuário solicita passar pelo middleware, ele será passado para a próxima rota que atende à solicitação (a jusante). Quando o rendimento próximo não pode capturar o próximo middleware, ele retorna em ordem inversa para continuar executando o código (a montante).
O exemplo a seguir mostra o exemplo do Hello World escrito usando este método especial: no início, a solicitação do usuário passa pelo middleware em tempo de resposta X e pelo middleware de madeira. Esses dois meios médios registram alguns detalhes da solicitação e, em seguida, "passa" o middleware da resposta uma vez, finalmente encerre a solicitação e retorne a "Hello World".
Quando o programa é executado para produzir a seguir, o fluxo de código pausa a execução do código restante do middleware e muda para o próximo middleware definido para executar o código. Essa maneira de mudar o controle é chamada a jusante. Quando não houver o próximo middleware para executar a jusante, o código será executado em ordem inversa.
var koa = requer ('koa'); var app = koa (); // x-response-timeApp.use (function *(a seguir) {// (1) insira a rota var start = new date; rendimento a seguir; // (5), digite o start x-RESPONSONETE/Middleware e registre o tempo '' viajou '' através da hora '' '' '' // (5), digite o start; (6) Retorne this.body}); // loggerapp.use (function *(a seguir) {// (2) Digite o middleware do logger var start = new Date; rendimento a seguir; // (4) digite o middleware do logger novamente e grave o tempo quando "viaja"), através deste middleware duas vezes var ms = new - start; RespoMeApp.use (função *() {// (3) Digite o middleware da resposta e o próximo middleware que atende às condições não é capturado e passou para montante this.body = 'hello world';}); App.Listen (3000);No código de exemplo acima, o middleware foi marcado nos comentários na ordem em que é executado. Você também pode tentar executar este exemplo e imprimir e gravar a saída e o tempo consumido de cada link.
.middleware1 {// (1) faça algumas coisas .middleware2 {// (2) faça algumas outras coisas .middleware3 {// (3) Nenhum próximo rendimento! // this.body = 'hello world'} // (4) faça outras coisas posteriormente} // (5) faça algumas coisas mais fortes e retorne}A ordem de execução do middleware está marcada no código pseudo-código acima. Parece um pouco com o rendimento quando Ruby executa um bloco? Talvez isso o ajude a entender melhor como Koa funciona.
KoA Access MySQL Database Operação
Método de implementação Um (CO-MYSQL)
A biblioteca MySQL é implementada na forma de retornos de chamada, enquanto o middleware KOA requer a forma de promessa. Depois de pesquisar, descobrimos que o CO-MYSQL e o MySQL-Co. As duas bibliotecas têm idéias semelhantes. O MySQL-Co possui um grau de encapsulamento mais alto e usa o MySQL2 mais rápido, enquanto o CO-MYSQL é mais simples, apenas encapsulando o MySQL.Query na forma de promessa. A seguir, o método de escrita baseado em co-mysql
var wrapper = requer ('co-mysql'), mysql = requer ('mysql'); var options = {host: 'localhost', porta: 3306, banco de dados: 'teste', user: 'root', 'senha:' rootroot '}; var pool = mySql.createPool (opções), p.rbra (wraper); render este.render ('index', {title: linhas [0] .FieldName}); ...}) ();Implementar o método dois (Promisify-node)
Encontre a biblioteca Promisify Node e você pode converter a biblioteca em um formulário de promessa como um todo. O código de amostra é o seguinte:
var promisify = require ("Promisify-node"); var db = promisify ("mydbhelper"); ... var lobs = rendimento db.getbyid ('tableName', {id: 1}); render este.render ('index', {title: linhas [0] .FieldName}); ...Método de implementação três (Thunkify, Thunkify-Wrap)
O encapsulamento também pode ser concluído usando Thunkify. Thunkify-Wrap é uma versão aprimorada do Thunkify. No entanto, de acordo com a explicação, esse método pode ser eliminado no desenvolvimento futuro. O uso aproximado é o seguinte:
var genify = requer ('thunkify-wrap'). genify; var db = genify ("mydbhelper"); ... var lobs = rendimento db.getbyid ('tableName', {id: 1}); render este.render ('index', {title: linhas [0] .FieldName}); ...Método de implementação quatro (método direto)
Transforme diretamente o código original em Express em um formulário de promessa, consulte o CO-MYSQL e aprenda cuidadosamente o conhecimento relevante da promessa e complete a transformação do código existente. O código e a descrição são os seguintes:
dbhelper.js
var config = requer ('./ dbconfig'); var options = {'host': config.db_host, 'porta': config.db_port, 'database': config.db_name, 'user': config.db_user, 'senha': config.db_passks; mysql.createPool (opções); // encapsulamento interno do MySQL, execute a função SQL Função ExecQuery (SQL, valores, retorno de chamada) {var errinfo; Pool.getConnection (function (err, conexão) {if (err) {errinfo = 'db-get Database Connection Exception!'; lança errinfo;} else {var Querys = Connection.Query (sql, valores, function (err, linhas) {release); if (errr) (errinfo; Retorno de chamada (NULL, linhas); } catch (err) {}} // retorna o formulário de função da promessa para a interface externa exports.getById = function (tableName, id) {return New Promise (function, resolve, rejeição) {var valores = {id: id}; var sql = 'selet * de ?? } else {resolve (linhas); render este.render ('index', {title: linhas [0] .FieldName}); ...Código
Consulte a seção de operação do banco de dados neste projeto. O projeto está em desenvolvimento contínuo e a seção Exemplo de banco de dados é retirada deste projeto.
https://github.com/zhoutk/koadmin.git