Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Página não exibe produtos do banco de dados.

Boa tarde.

Quando acesso http://localhost:3000/produtos não está aparecendo minha tabela. Vou postar os códigos aqui. Agradeço a ajuda.

C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe  Ver 8.0.11 for Win64 on x86_64 (MySQL Community Server - GPL)

Connection id:          33
Current database:       casadocodigo_nodejs
Current user:           root@localhost
SSL:                    Cipher in use is DHE-RSA-AES128-GCM-SHA256
Using delimiter:        ;
Server version:         8.0.11 MySQL Community Server - GPL
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Uptime:                 3 hours 49 min 57 sec

Threads: 2  Questions: 6560  Slow queries: 0  Opens: 263  Flush tables: 2  Open tables: 228  Queries per second avg: 0.475
--------------

mysql> show tables;
+-------------------------------+
| Tables_in_casadocodigo_nodejs |
+-------------------------------+
| produtos                      |
+-------------------------------+
1 row in set (0.00 sec)

app.js:

var app = require('./config/express')();

var rotasProdutos = require('./app/routes/produtos')(app);

app.listen(3000,function(){
    console.log("servidor rodando");
});

produtos.js: Eu coloquei a senha 1234 pois não conseguia seguir na instalação do SQL sem definir senha:

module.exports = function(app){
    app.get('/produtos',function(req,res)){
        var mysql = require('mysql');
        var connection = mysql.createConnection({
            host : 'localhost',
            user : 'root',
            password : '1234',
            database : 'casadocodigo_nodejs'
        });

        connection.query('select * from produtos',function(err,results){
            res.send(results);

        });

        connection.end();
    });
}

express.js:

var app = require('express')();
app.set('view engine','ejs');
app.set('views','./app/views');

module.exports = function() {
    return app;
}

Package.json

{
  "name": "casadocodigo",
  "version": "1.0.0",
  "description": "site da casa do codigo",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "ricardo",
  "license": "ISC",
  "dependencies": {
    "ejs": "^2.5.9",
    "express": "^4.16.3",
    "mysql": "^2.15.0"
  }
}
7 respostas

Oi Ricardo, mas você está tendo erro ou coisa aqui? Sua tabela produtos, tem registros nelas? Mostra pra gente o código da view que lista os produtos?

Para identificar se está ocorrendo algum problema de conexão, tente fazer o seguinte ajuste no connection.query:

 connection.query('select * from produtos',function(err,results){
    if (err){
        console.log(err);
         }
            res.send(results);

        });

Também estou tendo esse problema!

Fiz conforme indicado pelo Daniel:

{ Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
    at Handshake.ErrorPacket (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\sequences\Handshake.js:130:18)
    at Protocol._parsePacket (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\Protocol.js:279:23)
    at Parser.write (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\Parser.js:76:12)
    at Protocol.write (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\Protocol.js:39:16)
    at Socket.<anonymous> (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\Connection.js:103:28)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    --------------------
    at Protocol._enqueue (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\Protocol.js:145:48)
    at Protocol.handshake (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\protocol\Protocol.js:52:23)
    at Connection.connect (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\Connection.js:130:18)
    at Connection._implyConnect (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\Connection.js:461:10)
    at Connection.query (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\mysql\lib\Connection.js:206:8)
    at C:\Users\arthu\Desktop\Alura\Node\casadocodigo\app\routes\produtos.js:11:20
    at Layer.handle [as handle_request] (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\arthu\Desktop\Alura\Node\casadocodigo\node_modules\express\lib\router\layer.js:95:5)
  code: 'ER_NOT_SUPPORTED_AUTH_MODE',
  errno: 1251,
  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
  sqlState: '08004',
  fatal: true }

Arthur, seu problema parece outro. O cliente MySQL e o pacote do Node estão com algum conflito na autenticação, isso se dá por causa das diferenças de versões dos dois.

Veja se esse outro tópico te ajuda: https://cursos.alura.com.br/forum/topico-error-er_not_supported_auth_mode-client-does-not-support-authentication-prot-60646

Lá temos um link para outro tópico resolvido, e também há uma solução descrita lá. São duas alternativas válidas.

solução!

Valeu, Wanderson!

Marquei como lido pois acabei parando este curso para focar em outros. Questão de prioridades. No futuro vou voltar ao node js. Obrigado pela atenção de todos.