Node / Express / mysql如何在jade页面中获取SQL结果?

时间:2013-10-18 16:19:30

标签: javascript mysql node.js express pug

我有一个节点/快速应用程序,用于监视我的MySQL数据库。 我的页面是这样的:

节点:

app.get('/banners', function(req,res){
    connection.query("SELECT * FROM banner_store_idx WHERE id_type='1' ORDER BY id_banner ASC", function selectCb(err, results, fields) {
        if (err) {
            throw err;
        }
        res.render('banners', {
            title: results[0].title,
            results: results
        });
    });
});

这个Jade模板:

!!!
html
    head
    body
    ul
    - each result in results
        li(id=result['name_store'])= result['name_store']
    div#AJAXresults(style='margin: 0 auto; width: 800px; height: 600px; margin: 0 0 20px 0; border: solid 1px #999; overflow-y: scroll;')

这部分呈现完美。

现在,我想做什么:

当用户点击其中一个列表元素时,它应该生成一个Mysql SELECT并在div#AJAXresults中显示所选表(name_store)的结果。

我可以使用jquery,并通过php进行ajax调用,但它会失败的目的...我不想链接到另一个页面,我知道该怎么做,我不想要一个页面刷新...你的建议是什么?

编辑:

我可以做类似的事情(受到另一个线程的启发):

$('#id of list elem').click(function() {
    $.get('/ajax', {id:elem_id}, function(result) {
        $('#AJAXresults').html(result);
    }
}

然后在节点

app.get('/ajax', function(req,res){
connection.query("SELECT * FROM id ", function selectCb(err, results, fields) {
    if (err) {
        throw err;
    }
    res.send(results);
});
});

1 个答案:

答案 0 :(得分:1)

你可以这样做:

在express中添加新路线:

app.get('/your/route/name', function(req,res) {
      var id = req.query.id; // get your id from ajax request

      ...

      res.send(render_html); 
});

Jade:

li.list-result(id=result['name_store'], data-id=result['id'])= result['name_store']

Javascript:

$('.list-result').click(function(){
    var id = {id: $(this).data("id")};
    $.ajax({
      type: "GET",
      url: "/your/route/name",
      data: id,
      success: function(data) {
          $("#AJAXresults").html(data);
      }
    });
);

我没有测试任何此代码,但您明白了这一点:)

P.S。 :不要忘记在节点中对你的id进行sanatize。