PRECISO DE ALGUÉM PARA ME AJUDAR COM TESTES
Citação::
Muito obrigado à todos os que ajudaram! Os testes indicam que o pacote está ok e que posso gravar o vÃdeo, o primeiro da série sobre Angular e Visual Studio Code!
LAMPIAO, o systemjs está ali porque esse pacote é remanescente de um outro que já uso aqui. Na verdade poderia tirar esse dependência, mas já que está funcionando, como diria meu avô, [Ô]o que abunda, não atrapalha[Ô].
Blz Kerplunk,
Dei uma rápida pesquisada no Express, você citou que irá produzir novos vÃdeos com o angular 2, pretende mostrar algo com o Express?
é possÃvel fazer tudo que faço hoje numa API feita no C#, ou seja, ter os recursos que tenho hoje numa WebAPI feita no C#, ter o mesmo no Express?
Esse [ô]fazer tudo[ô] que me refiro, é a parte da NF-e, porque o resto são validações e crud normal que qualquer linguagem faz.
é possÃvel fazer essa parte da NF-e, porque no C# é simples, hoje por exemplo se eu quero gerar uma nota, o sistema gera e me retorna uma reposta se foi ok ou não e já mostra numa tabela no frontend o status da nota, se quero ver o danfe, faço a solicitação e a resposta vem em forma de um pdf representando o Danfe.
A única coisa que acho ruim em tudo isso, é o custo de manter isso no Azure, com essa variação do dólar e esse governo corrupto que temos aqui.
Bom é isso, ficaria grato com sua visão sobre isso.
Abraços
var express = require([ô]express[ô]);
var mysql = require([ô]mysql[ô]);
var bodyParser = require([ô]body-parser[ô]);
connectionpool = mysql.createPool({
host: [ô]localhost[ô],
user: [ô]seu usuario[ô],
password: [ô]sua senha[ô],
database: [ô]seu db[ô]
});
var app = express();
app.use(express.static(__dirname + [Ô]/public[Ô]));
app.use(function (req, res, next) {
res.setHeader([ô]Access-Control-Allow-Origin[ô], [ô]*[ô]);
res.setHeader([ô]Access-Control-Allow-Methods[ô], [ô]GET, POST, OPTIONS, PUT, PATCH, DELETE[ô]);
res.setHeader([ô]Access-Control-Allow-Headers[ô], [ô]X-Requested-With,content-type[ô]);
res.setHeader([ô]Access-Control-Allow-Credentials[ô], true);
next();
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get([ô]/api/clientes/:id[ô], function (req, res) {
connectionpool.getConnection(function (err, connection) {
if (err) {
console.error([ô]CONNECTION error: [ô], err);
res.statusCode = 503;
res.send({
result: [ô]error[ô],
err: err.code
});
} else {
console.log(req.params.id);
connection.query([ô]SELECT * FROM customers where id=? [ô], req.params.id, function (err, rows, fields) {
if (err) {
console.error(err);
res.statusCode = 500;
res.send({
result: [ô]error[ô],
err: err.code
});
}
res.send(rows
);
connection.release();
});
}
});
});
app.get([ô]/api/clientes/[ô], function (req, res) {
connectionpool.getConnection(function (err, connection) {
if (err) {
console.error([ô]CONNECTION error: [ô], err);
res.statusCode = 503;
res.send({
result: [ô]error[ô],
err: err.code
});
} else {
console.log([Ô]tudo[Ô]);
connection.query([ô]SELECT * FROM customers[ô], [Ô][Ô], function (err, rows, fields) {
if (err) {
console.error(err);
res.statusCode = 500;
res.send({
result: [ô]error[ô],
err: err.code
});
}
res.send(rows
);
connection.release();
});
}
});
});
var port = 8080;
app.listen(port);
console.log([Ô]Server rodando na porta #[Ô] + port);
Só aqui, tenho um método GET para busca geral da tabela [Ô]customers[Ô] e um passando parâmetros. Simples, direto, sem muita delonga. A serialização é automática, basta passar o resultado do Select como retorno que o express se encarrega.
Citação::
Na verdade com express é até mais fácil que com o C#. Foi com ele que vi as vantagens do uso de DBaaS. E sim, é totalmente possÃvel. com pouquÃssimas linhas de código e já está pronto. O [Ô]calcanhar de Aquiles[Ô] é a péssima integração com SQL Server. Mas se você usar MySQL como banco de dados, então estará no paraÃso. Um exemplo de como fica:
var express = require([ô]express[ô]);
var mysql = require([ô]mysql[ô]);
var bodyParser = require([ô]body-parser[ô]);
connectionpool = mysql.createPool({
host: [ô]localhost[ô],
user: [ô]seu usuario[ô],
password: [ô]sua senha[ô],
database: [ô]seu db[ô]
});
var app = express();
app.use(express.static(__dirname + [Ô]/public[Ô]));
app.use(function (req, res, next) {
res.setHeader([ô]Access-Control-Allow-Origin[ô], [ô]*[ô]);
res.setHeader([ô]Access-Control-Allow-Methods[ô], [ô]GET, POST, OPTIONS, PUT, PATCH, DELETE[ô]);
res.setHeader([ô]Access-Control-Allow-Headers[ô], [ô]X-Requested-With,content-type[ô]);
res.setHeader([ô]Access-Control-Allow-Credentials[ô], true);
next();
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get([ô]/api/clientes/:id[ô], function (req, res) {
connectionpool.getConnection(function (err, connection) {
if (err) {
console.error([ô]CONNECTION error: [ô], err);
res.statusCode = 503;
res.send({
result: [ô]error[ô],
err: err.code
});
} else {
console.log(req.params.id);
connection.query([ô]SELECT * FROM customers where id=? [ô], req.params.id, function (err, rows, fields) {
if (err) {
console.error(err);
res.statusCode = 500;
res.send({
result: [ô]error[ô],
err: err.code
});
}
res.send(rows
);
connection.release();
});
}
});
});
app.get([ô]/api/clientes/[ô], function (req, res) {
connectionpool.getConnection(function (err, connection) {
if (err) {
console.error([ô]CONNECTION error: [ô], err);
res.statusCode = 503;
res.send({
result: [ô]error[ô],
err: err.code
});
} else {
console.log([Ô]tudo[Ô]);
connection.query([ô]SELECT * FROM customers[ô], [Ô][Ô], function (err, rows, fields) {
if (err) {
console.error(err);
res.statusCode = 500;
res.send({
result: [ô]error[ô],
err: err.code
});
}
res.send(rows
);
connection.release();
});
}
});
});
var port = 8080;
app.listen(port);
console.log([Ô]Server rodando na porta #[Ô] + port);
Só aqui, tenho um método GET para busca geral da tabela [Ô]customers[Ô] e um passando parâmetros. Simples, direto, sem muita delonga. A serialização é automática, basta passar o resultado do Select como retorno que o express se encarrega.
Entendi, o cruel é voltar a usar os tradicionais métodos de interação com o banco de dados, hoje eu tenho algo assim:
namespace Pluto.Api.Controllers.Persons.Customer
{
[Authorize]
[RoutePrefix([Ô]api/persons[Ô])]
public class CustomerController : BaseApiController
{
[HttpPost]
[Route([Ô]person-action[Ô])]
public Task<IHttpActionResult> CreateOrUpdate(Person person)
{
try
{
Services.Customer.CreateOrUpdate(person);
var response = Request.CreateResponse(HttpStatusCode.OK, Messages.SuccessfulOperation);
return Task.FromResult(ResponseSuccess(response));
}
catch (Exception ex)
{
return Task.FromResult(ResponseError(HttpStatusCode.BadRequest, ex.Message));
}
}
}
}
O controller é bem enxuto, eu tenho métodos que são herdados de um controller base e nesse método é feito toda a mágica, a validação e consequentemente a interação com o banco de dados, e o resultado final vem em forma de sucesso ou não.
O encapsulamento, eu já sei que dá para fazer no express, existe algum ORM para ele? para não ter que usar SQL puro, porque meu amigo fazer na mão não é o ideal, o objeto person no exemplo ai, contem lista de contatos, lista de endereços, entre outras coisas, não que seja impossÃvel fazer, mas muito trabalhoso usando o método tradicional.
Hoje a simples inclusão de um novo cliente, já vindo com uma lista de contatos, endereços, etc e já validados eu tenho isso:
_db.Persons.Add(person);
_db.SaveChanges();
transaction.Commit();
Raramente eu faço perguntas, mas como eu não conheço a tecnologia e sei que você já conhece, nada mais justo do que lhe perguntar, eu quero entender se dá para reutilizar, herdar, encapsular e as opções de ORM, não sei se seria algo precisamente para o Express, ou para o Node, creio eu que seria algo para o Node, e o express apenas o usaria.
Bom é isso, vou fazer uns testes com o exemplo que você passou, muito obrigado.
Abraços
Citação::
Ah não, em comparação com EF, o express é lixo. Ele é mais indicado para aprendizado do que necessariamente para uso em ambientes de produção. Até existe um ORM para ele, mas como disse, em comparação com o EF nem vale a pena cogitar. Pela simplicidade e resultados mais diretos, ele é muito melhor para iniciantes aprenderem os princÃpios Client/server. Sinceramente nunca usei para nenhum sistema em produção.
Eita Kerplunk, que balde de agua fria, rsrs.
Dei uma pesquisada e tem esse aqui tambem sequelizejs, teria que ter tempo para testar a integração, acho que vale mais usar em aplicações simples e que não são crÃticas, Mas tem aquele ditado, em time que esta ganhando não se mexe, é tão simples e intuitivo fazer as coisas no C# e EF, que achar algo que faça o mesmo não é tão simples assim. Mesmo o .Net Core, não esta tão preparado quanto o .Net tradicional que já esta consolidado no mercado.
Olhando o ORM que você passou e o sequelize, em ambos os casos, não são tão simples e diretos assim, e olhando os exemplos, são todos brutos, não se faz uso das boas práticas, como herança, encapsulamento, reflections, esses padrões que a gente aprende usando linguagem orientada a objetos.
Em todo caso eles não deixam de serem um opção, é que nem o angular 2, além dele existem vários por ai, vai do gosto e do nÃvel de conhecimento de cada um.
A idéia inicial era ter algo do mesmo nÃvel, mas que fosse mais barato manter isso na nuvem, hoje uso o Azure, e a cobrança é em dólar, e por incrivel que pareça é mais barato manter hospedado no data center do leste dos estados unidos, do que manter no data center do rio grande do sul ai na sua terra, só no brasil mesmo com esses bandidos no governo, só trazendo o Kim Jong-un para fazer um estagio aqui no brasil para ver se ainda tem jeito.
Grande abraço