使用节点从mysql获取有关ember应用程序的数据

时间:2014-05-16 18:03:38

标签: mysql node.js ember.js

我有一个小的ember应用程序,它使用node从mysql获取数据。目前,我使用以下内容获取客户数据:

function handleGet(connection,req,res) {
    var limit = ('undefined' === typeof req.params.limit) ? 200: req.params.limit;
    connection.query('SELECT * FROM customer LIMIT ' + limit, function handleSql(err, rows) {
        if (err){ logAndRespond(err,res); return; }
        if (rows.length === 0){ res.send(204); return; }
        res.send({customers : rows});
        connection.release();
    });
}

然而,我不希望为客户提供功能,为用户提供另一种功能等。 我该如何抽象呢? 我可以将表名传递给函数,没问题。问题是Ember期望响应表的名称。所以我无法改变这条线:

res.send({customers : rows});

res.send({tablename : rows});

因为它从字面上发送了“tablename'而不是变量的内容,如下所示: {"表名":[{" ID":1,"状态":" N" .....}]

谢谢!

2 个答案:

答案 0 :(得分:0)

由于另一个答案已经给你讲了,这就是解决方案:

function handleGet(connection, req, res) {
    var limit = ('undefined' === typeof req.params.limit) ? 200: req.params.limit;
    var table = req.params.table || return logAndRespond(new Error("Missing table param", res));
    connection.query('SELECT * FROM ' + table + ' LIMIT ' + limit, function handleSql (err, rows) {
        if (err){ logAndRespond(err,res); return; }
        if (rows.length === 0){ res.send(204); return; }
        var result = {};
        result[table] = rows;
        res.send(result);
        connection.release();
    });
}

答案 1 :(得分:-1)

你有一个错字,可能会阻止它发送表名变量值。你有“tablemame”而不是“tablename”。

另外,我强烈建议您从任何Javascript中删除实际的SQL语句!黑客可以修改您的代码以运行他们想要的任何SQL。