我有一个小的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" .....}]
谢谢!
答案 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。