【问题标题】:Node.js mysql display table on html sitehtml站点上的Node.js mysql显示表
【发布时间】: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)

【问题讨论】:

    标签: html mysql node.js


    【解决方案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 width="50px">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 就可以了工作吗?
    猜你喜欢
    • 2020-03-18
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多