Получение всего содержимого запроса MySQL в шаблонизатор Jade через NodeJS и Express - PullRequest
6 голосов
/ 02 августа 2011

Простой вопрос новичка, я начинаю с nodejs, и я довольно плохо знаком с бэкэнд-языками в целом.

Мне удалось опубликовать одно поле из базы данных на веб-странице, используя стандартный движок jadeexpress-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?

Спасибо:)

Ответы [ 4 ]

7 голосов
/ 02 августа 2011

Передайте полные результаты 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
- }
4 голосов
/ 05 августа 2011

Еще лучше

ul
  - each result in results
  li= result.text
2 голосов
/ 03 августа 2011

Благодаря generalhenry я нашел способ.

В принципе мне не нужно добавлять другие вещи в функцию get mysql или функцию запроса на сервере js.

Это всеЧто касается нефритового движка, этот код работает: возьмите в качестве входных данных переменную, которую вы передаете из функции get (в данном случае это результат), и итерируйте ее, выбирая нужное поле.

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

Надеюсьможет помочь другим в будущем:)

1 голос
/ 02 августа 2011

Вот так.Результаты - это массив, поэтому вы должны зацикливаться на нем

    for (var i in results){
         var sqlResult = results[i];
         console.log(sqlResult['text'], sqlResult['title']);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...