Как вывести данные в html div из mysql в nodejs? - PullRequest
0 голосов
/ 13 января 2019

Я использую экспресс в качестве фреймворка nodejs, это мой ajax-код на странице member.ejs

function load_member(){
        $.ajax({
          url: '/load_member',
          success: function(r){
            console.log(r);
          }, error: function(){
            console.log('Error!');
          }
        });
      }

и это мой код nodejs (server.js)

var express = require('express');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

app.set('view engine', 'ejs');

app.get('/load_member', function(req, res){
  var mysql = require('mysql');

  var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "root",
    database: 'db_node',
    port: '/Applications/MAMP/tmp/mysql/mysql.sock'
  });

  con.connect(function(err) {
      if (err) throw err;

      let sql = "SELECT * FROM users";
      con.query(sql, function (err, result) {
          if (err) throw err;

          result.forEach(value => {
            res.json({ data: result });
          });
      });
  });

});

Я получил эту ошибку от терминала

/Applications/MAMP/htdocs/nodejs/node_modules/mysql/lib/protocol/Parser.js:80
        throw err; // Rethrow non-MySQL errors
        ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (/Applications/MAMP/htdocs/nodejs/node_modules/express/lib/response.js:767:10)
    at ServerResponse.json (/Applications/MAMP/htdocs/nodejs/node_modules/express/lib/response.js:264:10)
    at result.forEach.value (/Applications/MAMP/htdocs/nodejs/server.js:46:17)
    at Array.forEach (<anonymous>)
    at Query.<anonymous> (/Applications/MAMP/htdocs/nodejs/server.js:45:18)
    at Query.<anonymous> (/Applications/MAMP/htdocs/nodejs/node_modules/mysql/lib/Connection.js:502:10)
    at Query._callback (/Applications/MAMP/htdocs/nodejs/node_modules/mysql/lib/Connection.js:468:16)
    at Query.Sequence.end (/Applications/MAMP/htdocs/nodejs/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)

Большое спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Попробуйте с этим, вы не можете использовать res.json несколько раз ...

Вы будете перебирать значения в вашем представлении ....

  con.connect(function(err) {
      if (err) throw err;

      let sql = "SELECT * FROM users";
      con.query(sql, function (err, result) {
          if (err) throw err;

            res.json({ data: result });
      });
  });
0 голосов
/ 13 января 2019

Cannot set headers after they are sent означает, что для одного запроса вы пытаетесь отправить несколько ответов.

Перебор набора данных для печати в пользовательском интерфейсе должен произойти на клиенте, а не на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...