通过 NodeJS 和 Express 将 MySQL 查询的所有内容检索到 Jade 模板引擎

Posted

技术标签:

【中文标题】通过 NodeJS 和 Express 将 MySQL 查询的所有内容检索到 Jade 模板引擎【英文标题】:Retrieving all the content of a MySQL query to Jade template engine through NodeJS and Express 【发布时间】:2011-10-18 09:40:57 【问题描述】:

简单的新手问题,我是从 nodejs 开始的,而且我对后端语言很陌生。

我设法使用 express-js 中的默认玉引擎将单个字段从数据库发布到网页。

/**
 * Module dependencies.
 */

var express = require('express');

var app = module.exports = express.createServer();
var sqlResult;
//mysql
var mysqlClient = require('mysql').Client,
    newClient = new mysqlClient(),
    Database = 'test',
    Table = 'test_table';

    newClient.user ='root';
    newClient.password='password';
    newClient.connect(console.log('connected to the database.'));
    newClient.query('USE '+Database);
    newClient.query(
  'SELECT * FROM '+Table,
  function selectCb(err, results, fields) 
    if (err) 
      throw err;
    
    sqlResult = results[0];
    console.log(sqlResult['text'], sqlResult['title']);
  
);
// Configuration

app.configure(function()
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session( secret: 'your secret here' ));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
);

app.configure('development', function()
  app.use(express.errorHandler( dumpExceptions: true, showStack: true )); 
);

app.configure('production', function()
  app.use(express.errorHandler()); 
);

// Routes

app.get('/', function(req, res)
  res.render('index', 
    title: sqlResult['title']
  );
);

app.listen(3000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

我的问题是,如何显示由 MySQL Query 检索到的所有元素的列表?

谢谢你:)

【问题讨论】:

【参考方案1】:

将完整结果传递给 Jade

app.get('/', function(req, res)
  newClient.query('USE '+Database);
  newClient.query('SELECT * FROM '+Table, function selectCb(err, results, fields) 
    if (err) 
      throw err;
    
    res.render('index', 
      title: results[0].title,
      results: results
    );
  
);

然后在你的 Jade 中遍历它们

- for( var i = 0, len = results.length; i < len; i++ ) 
  .result
    .field1= results[i].field1
    .field2= results[i].field2
- 

【讨论】:

这段代码并不完全有效,但让我走上了正确的道路!【参考方案2】:

更好

ul
  - each result in results
  li= result.text

【讨论】:

【参考方案3】:

感谢generalhenry,我找到了办法。

基本上我不需要在服务端js中的mysql get函数或者查询函数中添加其他东西。

这都是关于玉引擎的,这段代码有效:将您从 get 函数(在本例中为结果)传递的变量作为输入,并遍历它,选择我想要的字段。

h1 Hello there!
p Welcome to this try
- for( var i = 0; i < results.length; i++ ) 
- var textbody = results[i]
    p= textbody['text']
- 

希望将来可以帮助其他人:)

【讨论】:

【参考方案4】:

像这样。结果是一个数组,所以你必须循环它

    for (var i in results)
         var sqlResult = results[i];
         console.log(sqlResult['text'], sqlResult['title']);
    

【讨论】:

在控制台中工作,但问题是我仍然无法将这个数组带到前端/Jade 引擎。

以上是关于通过 NodeJS 和 Express 将 MySQL 查询的所有内容检索到 Jade 模板引擎的主要内容,如果未能解决你的问题,请参考以下文章

使用 Nodejs、Express、Mongoose 和 React 将图像上传到 MongoDB

node.js用express怎么查询到MongoDB数据库列表

Express 和 Nodejs:调用外部 API 的最佳方式

我想通过 NodeJS Express 应用程序将 Azure blob 存储与 Angular 应用程序连接起来

通过 Websockets 在 Nodejs 和 Python 之间进行通信

使用Socket.IO以及Express和NodeJS导出