【问题标题】:Get data from MySQL and output it to HTML using Node.js从 MySQL 获取数据并使用 Node.js 将其输出到 HTML
【发布时间】:2018-10-12 20:17:50
【问题描述】:

我对 Node.js 有点陌生。我可以使用 Node.js 将数据从我的 HTML 插入 MySQL,但我无法从 MySQL 获取数据并将其输出到我的 HTML 页面。我已经发布了我在下面完成的代码。我正在努力将数据放入我的 HTML 页面中。

index.html

<form action="/" method="post">
    <input id="name" type="text" name="name" placeholder="Type your name...">
    <input id="message" type="text" name="message" placeholder="Type message...">
    <input class="submit_message" type="submit" value="Send">
</form>

server.js

var express = require('express');
var app = express();
var mysql = require('mysql');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false });

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use('/', express.static(__dirname + '/'));

var connection = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "",
    database: "mywebsite"
});

connection.connect();

app.get('/', function (req, res) {
    connection.connect();  
    connection.query('SELECT * FROM users', function(err, rows, fields) {  
        connection.end();
        if (err) throw err;
        console.log("Data displayed");
    });
});

app.post('/', function(req, res) {
    var username = req.body.name;
    var usermessage = req.body.message;
    connection.query("INSERT INTO `users` (Name, Message) VALUES (?,?)", [username.toString(), usermessage.toString()], function(err, result) {
        if(err) throw err;
        //Output results
        console.log(result.affectedRows + ' rows updated. ID is ' + result.insertId);
    });
    res.sendFile(__dirname + '/index.html');
});

app.listen(3000, function () {
    console.log('Connected to port 3000');
});

【问题讨论】:

  • 如果您只使用 HTML。你不能做这个。您需要一种诸如 JavaScript 之类的编程语言来实现从服务器获取数据并将其输出到页面上。 JavaScript 有很多方法可以做到这一点。您可以使用fetch API 从服务器抓取数据,然后将其输出到页面上。这是一个帮助您入门的链接:developer.mozilla.org/en-US/docs/Web/API/Fetch_API
  • 关于如何做到这一点的教程有数千个。你试过用谷歌吗?
  • @Curious13 他只需要查看引擎将数据放入 html 并将其发送给客户端。问题是他没有花足够的时间来了解快递是如何运作的。
  • 我正在使用静态中间件。我还需要使用视图引擎吗?
  • 查看引擎允许您将 db 中的数据渲染到您的 html 文件中。所以是的,你需要它。

标签: javascript html mysql node.js


【解决方案1】:

您可以安装 EJS 包,在 html 中使用 Javascript 并从后端处理数据。阅读更多关于点击here.

运行以下命令安装并保存ejs包:

npm install ejs -s

将您的 Index.html 重命名为 Index.ejs

设置引擎:

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

我认为你的 app.get 应该是这样的:

app.get('/', function (req, res) {
    connection.query('SELECT * FROM users', function(err, result, fields) {  
        connection.end();
        if (err) throw err;
        console.log("Data displayed");
        res.render("Index", { result: result });
    });
});

res.render("Index", {result: result}); 将调用您的 Index.ejs,将 Json 与您的数据一起传递。

您的 Indes.ejs 将是这样的:

<table id="tblData" class="table table-bordered table-hover">
    <thead class="thead-inverse">
        <tr>
          <th data-column-id="Name">
             Name
          </th>
          <th data-column-id="Message">
             Message
          </th>
        </tr>
    </thead>
    <tbody></tbody>
</table>

最后你可以添加&lt;script&gt;&lt;/script&gt;Jquery DataTables

//Declare the var with the data
        var Result = <%- JSON.stringify(result) %>;

        var TableData = null;
        $(function () {
            function ajusTables() {

                $('.table').css('width', '100%');
                $('.dataTables_scrollHeadInner').css('width', '100%');
            }

            TableData = $('#tblData').DataTable({
                "serverSide": false,
                "drawCallback": function (settings) {
                    ajusTables();
                },
                "scrollX": true,
                "processing": true,
                "paging": true,
                "lengthChange": false,
                "searching": true,
                "ordering": true,
                "info": true,
                "autoWidth": true,
                "deferRender": true,
                "columns": [
                    { "data": "Name" },
                    { "data": "Message" },
                ],
                "order": [0, "asc"]
            });
            console.log(Result);
            TableData.rows.add(Result)
            TableData.draw();
        });
    </script>

这种使用数据的方式总是适合我。

希望对你有帮助。

【讨论】:

  • 我的服务器响应不断出现错误Error: No default engine was specified and no extension was provided.
  • 你应该设置引擎。试试这个:app.set("view engine", "ejs"); .
  • 我现在在服务器响应中收到此错误消息Error: Failed to lookup view "index" in views directory "C:\test\views"
  • 您是否尝试将目录设置为静态?类似:app.use(express.static(__dirname + '../YOURDIRECTORY'));
  • 是的,你可以在我上面的代码app.use('/', express.static(__dirname + '/'));看到它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
  • 1970-01-01
相关资源
最近更新 更多