使用 Node.JS 查询 MySQL 并在网页中显示结果

Posted

技术标签:

【中文标题】使用 Node.JS 查询 MySQL 并在网页中显示结果【英文标题】:Querying MySQL with Node.JS and display results in webpage 【发布时间】:2014-05-04 15:05:34 【问题描述】:

我的目标是使用 Node.JS 查询 mysql 以获得更好的交互性。我的查询是一个简单的SELECTJOINs。我设法构建了一个在控制台中显示结果的脚本,但是在网页中显示它时我有点卡住了。这是我的代码:

var mysql = require('mysql');

var mySqlClient = mysql.createConnection(
    host    : 'server',
    user    : 'login',
    password: 'pwd',
    database: 'db'
);

var selectQuery = 'SELECT fields FROM table t1\
                   INNER JOIN table t2\
                   ON t1.field = t2.field';
mySqlClient.query(
    selectQuery,
    function select(error, results, fields) 
        if(error) 
            console.log(error);
            mySqlClient.end();
            return;
        

        if(results.length > 0) 
            console.log(results);
         else 
            console.log('No data');
        
        mySqlClient.end();
    );

将其包含到网页中的最佳方法是什么?我需要用 Node.JS 创建一个 httpServer 吗?

非常感谢您的帮助!

编辑 我想在使用 Zend 框架设计的 php 应用程序中使用 Node.JS。 Node.JS 应用程序不会是我项目的唯一应用程序。

【问题讨论】:

看看 express.js 作为网络服务器前端。应该很容易设置。 嗨!谢谢你的评论。我已经有一个前端网络服务器。这只是 Zend Framework 应用程序的一部分。我的目标是在现有网页中包含结果。 你必须从 nodejs 到你当前的前端服务器进行某种数据传输,因为两者都基于不同的技术,因此不能直接包含在内。 “最简单”的方法是让节点通过自己的服务器提供数据。为此,您可以创建自己的代码或使用 express.js 之类的代码。 我应该使用 express.js 以 JSON 格式提供数据,以便将结果包含在网页中吗?请原谅我缺乏知识,我被介绍给 Node.JS 才一个星期。我的 Google 研究将我带到了本教程 (pixelhandler.com/posts/…),这是您的意思吗? 看起来差不多。但是,它们似乎提供了一些来自 nodejs 的 html,而您并不需要这些 HTML。您的 nodejs 服务器将只是您的 PHP 内容的后端服务器,并且与互联网/用户没有直接连接。 【参考方案1】:

最简单的方法是使用节点框架。喜欢express。

你会做类似的事情

/*** omitting generic code for clarity ***/
app.get('/yourpage',function(req,res)

    //On request of this page initiating sql query. Assumes that the object initialization is done above.
    mySqlClient.query(
    selectQuery,
    function select(error, results, fields) 
        if(error) 
            console.log(error);
            mySqlClient.end();
            //render the template with error to be alerted
            res.render('tempaltefile',data:null,error:error);                
        

        if(results.length > 0) 
            //console.log(results);
            //render the template with fetched data
            res.render('tempaltefile',data:results,error:null);
         else 
            //console.log('No data');
            //render the template with empty data alert
            res.render('tempaltefile',data:null,error:"no data");
        
        mySqlClient.end();
    );

);

回复cmets

请提及您正在使用这个与 ph 代码一起使用。我认为您必须将节点代码构建为 api 并在 php 端使用它。

【讨论】:

感谢回复,这是否与现有的前端应用程序(例如 Zend Framework 应用程序)兼容?如何在 ZF 中包含 express.js?【参考方案2】:

我的情况和你一样,因为 NodeJS 我无法连接到 MySQL Zend。我的解决方案是使用:

Node-mysql 插件 (安装到 nodejs 控制台的命令:npm install mysql

安装 MySQL ODBC 连接器 (http://dev.mysql.com/downloads/connector/) 插件。

最后,重新启动计算机以应用新安装。

在您的 server.js 文件中,您可以使用此代码连接到您的 HostDB:

var app = require('http').createServer(handler), mysql = require('mysql'), connectionsArray = [], connection = mysql.createConnection( host: 'localhost', user: 'USERNAME MYSQL ', 密码: 'PASSWORD MYSQL', 数据库: 'NAME MYSQLDATABASE', 端口: 3306 );

【讨论】:

【参考方案3】:
app.post('/qr', function(req, res) 
  console.log("Check QR code.");
  let now = moment().format('MMMM Do YYYY, h:mm:ss a');
  let subnow = now.substr(0, 8);
  let subnowwild = subnow + "%";
  connection.query("select exists (select * from visit where timeIn like ?)", subnowwild, function(err, result) 
  if (err) throw err;
  console.log(result);
    if(result = 0) 
     res.redirect(307, '/savedata');
    
    else 
     res.redirect(307, '/updatedata');
    
  );
);

所以我想看看使用 mysql 获取数据时的响应是什么样的,这个网页出现了,但没有显示我正在寻找的答案。

如果您希望查询将数据作为 json 响应返回,也可以使用 res.send(result);

【讨论】:

以上是关于使用 Node.JS 查询 MySQL 并在网页中显示结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX 在 Node.js 上进行数据库查询

MySQL 结果来自 html 中的 node.js,由 react.js

Linux使用Node.js建立访问静态网页的服务实例详解

node.js 同步 mysql 查询

node.js,express - 在循环中以同步方式一个接一个地执行mysql查询

Node.js MySql如何知道用户ID以在登录后的查询中使用它