2011-08-02 24 views
6

Câu hỏi về newbie đơn giản, tôi bắt đầu với nodej và tôi khá mới đối với các ngôn ngữ phụ trợ nói chung.Lấy tất cả nội dung của truy vấn MySQL tới công cụ tạo mẫu Jade thông qua NodeJS và Express

Tôi đã quản lý xuất bản một trường duy nhất từ ​​cơ sở dữ liệu lên trang web bằng cách sử dụng công cụ tô ngọc mặc định trong 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); 

Câu hỏi của tôi là, làm cách nào để hiển thị danh sách tất cả các thành phần được truy vấn bởi Truy vấn của tôi?

Cảm ơn bạn :)

Trả lời

1

Như thế này. Kết quả là một mảng vì vậy bạn phải vòng qua nó

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

mà làm việc trong giao diện điều khiển, nhưng vấn đề là tôi vẫn không thể mang lại mảng này vào phía trước kết thúc/Jade động cơ. – Dave

7

Vượt qua kết quả đầy đủ để 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 
    }); 
    } 
}); 

Sau đó lặp qua chúng bên Jade của bạn

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

mã này không hoạt động chính xác nhưng đặt tôi đúng cách! – Dave

2

Nhờ generalhenry tôi đã tìm thấy một cách.

Về cơ bản tôi không cần phải thêm các nội dung khác vào hàm mysql get hoặc chức năng truy vấn trong máy chủ js.

Đó là tất cả về động cơ ngọc, mã này hoạt động: lấy đầu vào biến mà bạn đang chuyển từ hàm get (trong trường hợp này là kết quả) và lặp lại nó, chọn trường mà tôi muốn.

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

Hope có thể giúp đỡ người khác trong tương lai :)

4

Even Better

ul 
    - each result in results 
    li= result.text 
Các vấn đề liên quan