Olá a todos. Antecipando o início do curso "Fullstack JavaScript Developer" , queremos compartilhar um pouco de material que foi escrito por nosso escritor freelancer.
O Express é uma das estruturas da Web mais populares que suporta roteamento, pesos médios e um sistema de modelos. Fazer um back-end no Node.js sem o Express em 2020 é uma atividade bastante estranha, porque o Express é uma estrutura de fato para criar um aplicativo da Web no Node.js.Hoje tentaremos criar uma API CRUD simples usando o banco de dados MySQL. Um leitor experiente do Node.js. perguntará: onde está o MongoDB, com o qual o Node.js. geralmente são usados juntos? nós vamos usar o MySQL. Criaremos uma API para um aplicativo Todo simples, caso alguém queira se conectar ao seu todo (e não importa se está escrito com React ou não), anexaremos um pouco para trás e brincaremos com ele."Arquitetura" e a essência da nossa aplicação
Em nosso aplicativo, será possível criar, receber, atualizar e excluir Todo. Em geral, teremos um conjunto mínimo de funções CRUD (criar exclusão de atualização de leitura).No final, combinaremos o aplicativo com o aplicativo React e testaremos tudo.Primeiro, darei a estrutura dos arquivos do aplicativo: a
seguir, darei uma tabela de ações e métodos que estão em nosso aplicativo:Criando seu aplicativo Node.js.
Vá para o seu diretório favorito, inicie o terminal e crie seu aplicativo. A propósito, provavelmente está claro no título que o Node.js já deve estar instalado. Se você ainda não o fez, simplesmente não pode ser baixado do link aqui. $ mkdir CRUD_API
$ cd CRUD_API
Em seguida, você precisa inicializar nosso aplicativo usando o npm init . Porque Como nosso aplicativo é mais um teste e treinamento, usarei um comando que preencherá todos os dados padrão para não perder tempo com pequenos detalhes: npm init -y
Nesse caso, com as mãos em mãos, package.json
você poderá alterar os dados para os que você precisa: o repositório do github, tags, autor, etc.Então, precisamos colocar todos os pacotes necessários para o aplicativo funcionar: npm i express mysql body-parser --save
Se você enviar seu desenvolvimento para o github mais tarde, crie um arquivo oculto .gitignore
para não arrastar os node_modules mais pesados e se desonrar . Nós escrevemos: touch .gitignore
code .gitignore
Entramos lá node_modules
, mais adiante neste arquivo, você pode inserir os nomes de pastas e arquivos que deseja ver posteriormente no servidor remoto.Configuração básica do Express
Na pasta raiz do projeto, crie um arquivo server.js
: const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/", (req, res) => {
res.json({ message: " " });
});
app.listen(3001, () => {
console.log(" 3001 ");
});
Agora podemos iniciar o servidor com:node server.js
Precisamos do Express para criar nossa API, e o pacote body-parser nos ajuda a analisar a solicitação e a criar req.body
uma que seja útil para roteamento.Agora nosso servidor pode fazer o seguinte:- Crie um aplicativo Express que torne o analisador de corpo uma alavanca intermediária usando app.use ()
- temos um get simples, apenas para testar o aplicativo
- Ouça a porta 3001 para todas as alterações recebidas
Inicialmente, nosso aplicativo funciona, então você pode fazer o banco de dados.Crie sua tabela de dados MySQL
Eu realmente espero que o leitor deste artigo não tenha problemas ao baixar e instalar o MySQL e o MySQLWorkBranch por conta própria. Em seguida, você mesmo cria um esquema (DB) com o nome que mais gosta (no meu caso, TODO) e, em seguida, seleciona a solicitação de raio e copia / digite o seguinte comando: CREATE TABLE IF NOT EXISTS `todo` (
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
text varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Em nosso banco de dados, tudo será no mínimo: apenas id e o texto do caso em si. No entanto, para adicionar outra coluna na qual, por exemplo, a urgência do seu caso possa ser descrita, espero que isso não cause problemas.Configuração e conexão com nosso banco de dados
Vamos estabelecer e configurar a conexão com o banco de dados. Criaremos uma nova pasta de aplicativo diretamente em nossa pasta raiz e, em seguida , criaremos um arquivo db.config.js
na pasta config
, com aproximadamente o mesmo conteúdo, que depende das suas configurações no MySQLWorkBranch. No meu caso, o arquivo ficará assim: module.exports = {
HOST: "localhost",
USER: "pavel",
PASSWORD: "",
DB: "TODO"
};
Depois disso, crie uma pasta para descrever nossos modelos de aplicativos / modos , nos quais criaremos um modelo: const mysql = require("mysql");
const dbConfig = require("../config/db.config.js");
//
const connection = mysql.createConnection({
host: dbConfig.HOST,
user: dbConfig.USER,
password: dbConfig.PASSWORD,
database: dbConfig.DB
});
//
connection.connect(err => {
if (err) throw error;
console.log(" ");
});
module.exports = connection;
//
Criar modelo
Na pasta model
, criamos um arquivo chamado deal.model.js
. Se você tiver uma pergunta, o que é um modelo em geral, leia um artigo como este e se familiarize com o padrão de design do MVC. Vou criar um construtor para um objeto Deal e usar a conexão para as seguintes funções CRUD:- criação de um novo negócio
- localizando caso por id
- recebendo todos os casos
- capacidade de atualizar nosso caso por id
- Excluir um caso por ID
- exclusão completa de todos os casos
Total, temos que fazer o seguinte:
const Deal = function(deal) {
this.text = deal.text;
};
Deal.create = (newDeal, result) => {
sql.query("INSERT INTO TODO SET ?", newDeal, (err, res) => {
if (err) {
console.log("error: ", err);
result(err, null);
return;
}
console.log(" ", { id: res.insertId, ...newDeal });
result(null, { id: res.insertId, ...newDeal });
});
};
Colocarei o restante do código no spoiler, porque não vejo nenhum motivo para trazer tudo, porque, na verdade, o padrão de código é repetido lá, apenas os comandos e argumentos sql mudam:o resto do códigoDeal.findById = (dealId, result) => {
sql.query(`SELECT * FROM TODO WHERE id = ${dealId}`, (err, res) => {
if (err) {
console.log(«error: », err);
result(err, null);
return;
}
if (res.length) {
console.log(« : », res[0]);
result(null, res[0]);
return;
}
//
result({ kind: «not_found» }, null);
});
};
Deal.getAll = result => {
sql.query(«SELECT * FROM TODO», (err, res) => {
if (err) {
console.log(«error: », err);
result(null, err);
return;
}
console.log(«deals: », res);
result(null, res);
});
};
Deal.updateById = (id, deal, result) => {
sql.query(
«UPDATE TODO SET text =? WHERE id = ?»,
[deal.text, id],
(err, res) => {
if (err) {
console.log(«error: », err);
result(null, err);
return;
}
if (res.affectedRows == 0) {
result({ kind: «not_found» }, null);
return;
}
console.log(« », { id: id, ...deal });
result(null, { id: id, ...deal });
}
);
};
Deal.remove = (id, result) => {
sql.query(«DELETE FROM TODO WHERE id = ?», id, (err, res) => {
if (err) {
console.log(«error: », err);
result(null, err);
return;
}
if (res.affectedRows == 0) {
// id
result({ kind: «not_found» }, null);
return;
}
console.log(« », id);
result(null, res);
});
};
Deal.removeAll = result => {
sql.query(«DELETE FROM TODO», (err, res) => {
if (err) {
console.log(«error: », err);
result(null, err);
return;
}
console.log(`deleted ${res.affectedRows} deals`);
result(null, res);
});
};
É tudo por agora. A próxima parte deste artigo está se aproximando, na qual terminamos de escrever o verso e começamos a testá-lo. E, por tradição, alguns links úteis: