html站点上的Node.js mysql显示表

Posted

技术标签:

【中文标题】html站点上的Node.js mysql显示表【英文标题】:Node.js mysql display table on html site 【发布时间】:2016-10-26 18:41:18 【问题描述】:

我是 node.js 的新手,并尝试在 html 网站上显示一个简单的表格。该表应填充来自 mysql select 的数据(例如:select * from testtable)。

但我真的不知道该怎么做。对于具有 php 背景的人,如何在 nodejs 中的 HTML 中显示一些 sql 内容?我知道 git mysql nodejs wiki,但它根本没有帮助,因为这只是获取数据而不是在网页上显示。

在 nodeJS 中做类似事情的最佳实践是什么?有没有简单易懂的方法,还是我应该继续使用 PHP?我真的很喜欢关于 node.js 的想法,但一开始就像在攀登一个湿滑的悬崖。

我还买了一本关于它的书,但是这本书从来没有深入到快递(因为这将是太多的信息.​​.)。所以我知道 express、pug、serve-static 并且我能够提供一个简单的 html。但就是这样,没有 CRUD 或 REST,我付了 50 欧元一无所获。

编辑: 我是否需要使用 API 或者可能以正确的方式使用 Angular.js?

编辑2:

C:\Users\user\node_test\CRUD2>node app.js
module.js:327
throw err;
^

Error: Cannot find module './routes'

at Function.Module._resolveFilename (module.js:325:15)

at Function.Module._load (module.js:276:25)

at Module.require (module.js:353:17)

at require (internal/module.js:12:17)

at Object.<anonymous> (C:\Users\user\node_test\CRUD2\app.js:2:14)
at Module._compile (module.js:409:26)

at Object.Module._extensions..js (module.js:416:10)

at Module.load (module.js:343:32)

at Function.Module._load (module.js:300:12)

at Function.Module.runMain (module.js:441:10)

EDIT3:

C:\Users\user\node_test\CRUD2>node app.js
Express server listening on port 4300
C:\Users\user\node_test\CRUD2\routes\testtable.js:4
var query = connection.query('SELECT * FROM testtable',function(err,rows)
                    ^

TypeError: Cannot read property 'query' of undefined
at C:\Users\user\node_test\CRUD2\routes\testtable.js:4:29
at C:\Users\user\node_test\CRUD2\node_modules\express-myconnection\lib\express-myconnection.js:87:41
at Pool.<anonymous> (C:\Users\user\node_test\CRUD2\node_modules\mysql\lib\Pool.js:47:16)
at Handshake.Sequence.end (C:\Users\user\node_test\CRUD2\node_modules\mysql\lib\protocol\sequences\Sequence.js:78:24)
at Handshake.ErrorPacket (C:\Users\user\node_test\CRUD2\node_modules\mysql\lib\protocol\sequences\Handshake.js:101:8)
at Protocol._parsePacket (C:\Users\user\node_test\CRUD2\node_modules\mysql\lib\protocol\Protocol.js:205:24)
at Parser.write (C:\Users\user\node_test\CRUD2\node_modules\mysql\lib\protocol\Parser.js:62:12)
at Protocol.write (C:\Users\user\node_test\CRUD2\node_modules\mysql\lib\protocol\Protocol.js:37:16)
at Socket.<anonymous> (C:\Users\user\node_test\CRUD2\node_modules\mysql\lib\Connection.js:73:28)
at emitOne (events.js:77:13)

【问题讨论】:

【参考方案1】:

这里是一个例子:

app.js

var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');

//Including controller/dao for testtable
var testtable = require('./routes/testtable'); 
var app = express();
var connection  = require('express-myconnection'); 
var mysql = require('mysql');
// all environments
app.set('port', process.env.PORT || 4300);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) 
  app.use(express.errorHandler());


app.use(
    connection(mysql,

        host: 'localhost',
        user: 'your_user',
        password : 'your_password',
        port : 3306, //port mysql
        database:'dbname'
,'pool')
);
app.get('/testtable', testtable.list);
app.use(app.router);
http.createServer(app).listen(app.get('port'), function()
    console.log('Express server listening on port ' + app.get('port'));
);

路由/testtable.js

exports.list = function(req, res)

  req.getConnection(function(err,connection)   
      var query = connection.query('SELECT * FROM testtable',function(err,rows)
        if(err)
          console.log("Error Selecting : %s ",err );

        res.render('testtable',page_title:"Test Table",data:rows);
      );
  );
;

views/testtable.ejs

<html><body>
<table border="1" cellpadding="7" cellspacing="7">
  <tr>
    <th >No</th>
    <th>Field 1</th>
    <th>Field 2</th>
    <th>Field 3</th>
  </tr>
  <% if(data.length) 
    for(var i = 0;i < data.length;i++)  %>
  <tr>
    <td><%=(i+1)%></td>
    <td><%=data[i].field1%></td>
    <td><%=data[i].field2%></td>
    <td><%=data[i].field3%></td>
  </tr>
  <% 
  else %>
  <tr>
    <td colspan="3">No user</td>
  </tr>
<%  %>
</table>
</body></html>

要运行这个“项目”,你必须安装一些节点模块,你可以在你的根目录中创建一个名为“package.json”的文件:


  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": 
    "start": "node app.js"
  ,
  "dependencies": 
    "ejs": "^1.0.0",
    "express": "3.5.1",
    "express-myconnection": "1.0.4",
    "jade": "*",
    "mysql": "2.2.0"
  

并在您的项目根目录下调用“npm install”。

希望对你有帮助。

【讨论】:

这真是太棒了!但是当我尝试启动 app.js Error: Cannot find module './routes' 时出现问题,它来自 module.js:327。我在 app.js 中将路由的要求更改为 var routes = require('./routes/testtable'); 但现在我得到了 throw new Error('Most middleware (like ' + name + ') is no longer bundled with Express? 试图通过安装npm install --save logger来解决问题,但并没有解决问题。 似乎 logger 现在是 morgan 并且 json 现在也不再包含在 express 中。所以谢谢你的例子和时间我会尝试在这个上创建我的应用程序。 路由到可测试它已经在“var testtable = require('./routes/testtable');”行定义。我在上面的示例中添加了一些“安装”和运行项目的提示。 尝试在“/node_modules/express-myconnection/examples/single”下运行示例,您需要使用 Windows 的 SET 或 LINUX 的 EXPORT 设置环境变量。并设置 **DB_HOST**='localhost' **DB_USER**='user' **DB_PASSWORD**='pwd' 和 **DB_DATABASE**='yourdb',现在在浏览器中调用 localhost:3000 就可以了工作吗?

以上是关于html站点上的Node.js mysql显示表的主要内容,如果未能解决你的问题,请参考以下文章

其他通过html用node.js连接和显示mysql的方式

使用 node.js 和 JavaScript 从 HTML 简单表单插入 INTO MySQL 表

SQL - node.js express - 反应加载行为

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

Node JS+Express:如何在 HTML(EJS) 中定义和使用 MySQL 数据?

text Gulp Node js将HTML解析为Firebase json和txt站点地图