INTRODUÇÃO: Após os nodejs anteriores Hello, World! Também podemos ver outros recursos poderosos. Com a popularidade atual da comunidade NodeJS e o apoio de um grande número de engenheiros, um grande número de módulos foi gradualmente introduzido.
Conteúdo: o seguinte demonstra a interação entre o NodeJS e o MySQL.
Neste momento, você precisa adicionar o módulo do MySQL aos NodeJs. No momento, o NPM (Node Package Manager) mencionado no capítulo anterior foi ativado.
Instale o módulo MySQL em nodejs:
A cópia do código é a seguinte:
$ npm install mysql
JS Script mySqltest.js
A cópia do código é a seguinte:
// mysqltest.js
// Carregar o módulo MySQL
var client = requer ('mysql'). cliente,
cliente = new client (),
// o nome do banco de dados a ser criado
Test_database = 'nodejs_mysql_test',
// o nome da tabela a ser criado
Test_table = 'teste';
//nome de usuário
client.User = 'root';
//senha
client.password = 'root';
// Crie uma conexão
client.connect ();
client.Query ('Criar banco de dados'+test_database, function (err) {
if (err && err.number! = client.error_db_create_exists) {
lança err;
}
});
// Se nenhum retorno de chamada for fornecido, algum erro será emitido como '' 'erro' '
// eventos do cliente
client.Query ('use'+test_database);
client.Query (
'Criar tabela'+test_table+
'(id int (11) Auto_increme,'+
'Título Varchar (255),'+
'texto de texto'+
'Criou DateTime,'+
'Chave primária (id))'
);
client.Query (
'Inserir em'+test_table+''+
'Definir título =?, Text =?, Criado =?',
['super legal', 'este é um bom texto', '2010-08-16 10:00:23']
);
VAR Query = client.Query (
'Inserir em'+test_table+''+
'Definir título =?, Text =?, Criado =?',
['Outra entrada', 'porque 2 entradas fazem um teste melhor', '2010-08-16 12:42:15']
);
client.Query (
'Selecione * de'+test_table,
função selectCB (err, resultados, campos) {
if (err) {
lança err;
}
console.log (resultados);
console.log (campos);
client.end ();
}
);
Execute scripts
A cópia do código é a seguinte:
nó mysqltest.js
Os efeitos são os seguintes:
// mysql-demo.js
const mysql = requer ('mysql2/promessa'); // Use MySQL2 que suporta promessa
requer ('dotenv'). config (); // Gerenciamento de variável de ambiente
// Use o pool de conexão para melhorar o desempenho
const pool = mysql.createPool ({
host: process.env.db_host || 'localhost',
Usuário: process.env.db_user || 'raiz',
Senha: process.env.db_password || 'raiz',
banco de dados: process.env.db_name || 'Nodejs_mysql_test',
WaitForConnections: True,
ConnectionLimit: 10,
Queuelimit: 0
});
// Definição da estrutura da tabela (Gerenciamento DDL)
const tabela_schema = `
Crie a tabela se não existe postagens (
id int a chave primária Auto_increment,
Título Varchar (255) não nulo,
texto de conteúdo,
CreateD_at DateTime padrão current_timestamp,
atualização_at datetime na atualização current_timestamp
) MOTOR = Innodb Padrão CharSet = UTF8MB4 COLLATE = UTF8MB4_UNICODE_CI;
`;
// encapsulamento de lógica de negócios
classe Postdao {
construtor (piscina) {
this.pool = pool;
}
async Initialize () {
aguarda this.pool.execute (table_schema);
console.log ('tabela verificada/criada');
}
ASYNC CreatePost (post) {
const [resultado] = aguarda this.pool.execute (
`Inserir em postagens (título, conteúdo)
Valores (?,?) `,
[post.title, post.content]
);
return {... post, id: result.insertId};
}
Async GetPosts (Page = 1, PageSize = 10) {
const offset = (página - 1) * Pagesize;
const [linhas] = aguarda this.pool.execute (
`Selecione * de postagens
Ordem por Created_at Desc
Limite? Deslocamento? `,
[Pagesize, deslocamento]
);
linhas de retorno;
}
Async transactionDemo () {
const Conn = aguarda this.pool.getConnection ();
tentar {
aguardar Conn.BegIntransaction ();
// operação de transação 1
aguardar conn.execute (
`Inserir em postagens (título, conteúdo)
Valores (?,?) `,
['Transação 1', 'Demoção de operação atômica']
);
// operação de transação 2
const [resultado] = aguardar Conn.Execute (
`Atualizar postagens Defina conteúdo =?
Onde título =? `,
['Conteúdo atualizado', 'Transação 1']
);
aguardar Conn.Commit ();
resultado de retorno;
} catch (err) {
aguardar conn.rollback ();
lança err;
} finalmente {
Conn.Release ();
}
}
}
// Exemplo de execução
(async () => {
tentar {
const Dao = novo Postdao (pool);
aguarda dao.initialize ();
// Crie um novo artigo
const NewPost = Aguarda Dao.createPost ({
Título: 'Modern Node.js MySQL Guide',
Conteúdo: 'Melhores práticas para operações de banco de dados'
});
console.log ('Criado post:', NewPost);
// Consulta de paginação
const posts = wait Dao.getPosts ();
console.log ('Primeira página resultados:', postagens);
// Demoção de transação
const txResult = aguarda dao.TransactionDemo ();
console.log ('transação concluída:', txResult);
// Consulta final
const finalposts = wait Dao.getPosts ();
console.log ('Postagens finais:', finalposts);
} catch (err) {
console.error ('erro de aplicativo:', err);
} finalmente {
aguardar pool.end ();
}
}) ();